如何将两个小数相乘并将结果四舍五入到小数点后两位?

例如,如果公式为41.75 x 0.1,则结果为4.175。如果我在C#中使用小数点进行此操作,它将自动舍入为4.18。我想四舍五入到4.17。

我尝试使用Math.Floor,但将其四舍五入为4.00。这是一个例子:

Math.Floor (41.75 * 0.1);

最佳答案

Math.Round(...)函数具有一个Enum来告诉它使用哪种舍入策略。不幸的是,这两个定义并不完全适合您的情况。

两种中点舍入模式是:

  • AwayFromZero -当一个数字在两个其他字符之间时,将四舍五入为最接近零的数字。 (又名,向上舍入)
  • ToEven -当一个数字位于两个其他字符之间时,将四舍五入到最接近的偶数。 (在.17上胜过.16,在.17上胜过.18)

  • 您要使用的是带有一些乘法的Floor
    var output = Math.Floor((41.75 * 0.1) * 100) / 100;
    
    output变量现在应该包含4.17。

    实际上,您还可以编写一个函数以采用可变长度:
    public decimal RoundDown(decimal i, double decimalPlaces)
    {
       var power = Convert.ToDecimal(Math.Pow(10, decimalPlaces));
       return Math.Floor(i * power) / power;
    }
    

    10-04 15:01