我很感兴趣如何以一些特定的方式将双变量四舍五入到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#计算“太准确”。
答案 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