sta*_*ith 29 c# decimal rounding
如何将两位小数相乘并将结果四舍五入到小数点后两位?
例如,如果方程为41.75 x 0.1,则结果为4.175.如果我在带小数的c#中执行此操作,它将自动舍入到4.18.我想向下舍入到4.17.
我尝试使用Math.Floor,但它只是向下舍入到4.00.这是一个例子:
Math.Floor (41.75 * 0.1);
Run Code Online (Sandbox Code Playgroud)
Are*_*ren 42
该Math.Round(...)函数有一个Enum来告诉它使用什么舍入策略.不幸的是,这两个定义并不完全符合您的情况.
两个中点舍入模式是:
你想要使用的是Floor一些乘法.
var output = Math.Floor((41.75 * 0.1) * 100) / 100;
Run Code Online (Sandbox Code Playgroud)
该output变量应该有它的4.17了.
实际上你也可以编写一个函数来获取一个可变长度:
public decimal RoundDown(decimal i, double decimalPlaces)
{
var power = Convert.ToDecimal(Math.Pow(10, decimalPlaces));
return Math.Floor(i * power) / power;
}
Run Code Online (Sandbox Code Playgroud)
Wic*_*cha 11
public double RoundDown(double number, int decimalPlaces)
{
return Math.Floor(number * Math.Pow(10, decimalPlaces)) / Math.Pow(10, decimalPlaces);
}
Run Code Online (Sandbox Code Playgroud)
截至.NET Core 3.0和即将到来.NET Framework 5.0的以下内容是有效的
Math.Round(41.75 * 0.1, 2, MidpointRounding.ToZero)
Run Code Online (Sandbox Code Playgroud)
c#中没有精密地板/西林蛋白的原生支持.
但是,您可以通过将数字乘以楼层来模拟功能,然后除以相同的乘数.
例如,
decimal y = 4.314M;
decimal x = Math.Floor(y * 100) / 100; // To two decimal places (use 1000 for 3 etc)
Console.WriteLine(x); // 4.31
Run Code Online (Sandbox Code Playgroud)
不是理想的解决方案,但如果数量很小则应该有效.
| 归档时间: |
|
| 查看次数: |
32180 次 |
| 最近记录: |