舍入到小数点后2位C#

时间:2016-08-10 11:06:04

标签: c#

我很感兴趣如何以一些特定的方式将双变量四舍五入到2位小数。究竟是什么意思? Math.Round(数字,2)工作正常,但...... 我有例如17.0449999的数字......

Math.Round(17.044999, 2) // 17.04

但在那种情况下,我想得到17.05。我找到了一种方法,例如:

Math.Round(17.044999, 3) // returns 17.045
Math.Round(17.045, 2) // returns 17.05

我想问的是还有其他/更好/更简单的方法吗?

[编辑]:

我想我发现这有点奇怪的问题。从一开始:

我们谈论具体的数字。我必须从奖金中获得5%的奖金,在这种情况下奖金是340,9。当我在Windows计算器340,9 * 0.05中进行计算时,结果为17,045。我在Excel中进行计算时得到的结果相同。但是当我在C#中进行相同的计算时,我会得到像17,04499999998这样的东西。这显然是如此接近17.045,我们可以很容易地将其四舍五入。但问题是,我不能将每个结果舍入到小数点后3位,因为这可能会改变其他结果。

似乎是特殊情况或C#计算“太准确”。

2 个答案:

答案 0 :(得分:3)

您可以使用:

System.Math.Ceiling (n * 100) / 100;

如下所述:

Difference between Math.Floor() and Math.Truncate()

示例:

System.Math.Ceiling (17.044999 * 100) / 100; // Returns 17.05

答案 1 :(得分:1)

public decimal RoundDown(decimal i, double decimalPlaces)
{
   var power = Math.Pow(10, decimalPlaces);
   return Math.Floor(i * power) / power;
}

public decimal RoundUp(decimal i, double decimalPlaces)
{
   var power = Math.Pow(10, decimalPlaces);
   return Math.Ceil(i * power) / power;
}

RoundDown(17.045, 2);  // 17.04
RoundUp(17.045, 2);    // 17.05