在c#中向下舍入到2位小数

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来告诉它使用什么舍入策略.不幸的是,这两个定义并不完全符合您的情况.

两个中点舍入模式是:

  1. AwayFromZero - 当一个数字介于另外两个数字之间时,它会向最接近零的数字四舍五入.(阿卡,围捕)
  2. ToEven - 当一个数字介于另外两个数字之间时,它会向最接近的偶数舍入.(将赞成.16超过.17,和.18超过.17)

你想要使用的是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)

  • 实际上,它应该使用“ Math.Round方法(十进制,Int32,MidpointRounding)”重载来工作(请检查http://stackoverflow.com/questions/13522095/rounding-down-to-2-decimal-places-in-c -尖锐) (2认同)

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)


Sir*_*rhc 9

截至.NET Core 3.0和即将到来.NET Framework 5.0的以下内容是有效的

Math.Round(41.75 * 0.1, 2, MidpointRounding.ToZero)
Run Code Online (Sandbox Code Playgroud)


Kam*_*ami 5

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)

不是理想的解决方案,但如果数量很小则应该有效.