0

为什么要把 C# 这个计算向上舍入?

500 -> 501

MessageBox.Show(Math.Ceiling(1 / (4 * 1 - 4 * 0.9) * 200).ToString());

返回。

---------------------------

---------------------------
501
---------------------------
OK   
---------------------------

我不知道为什么。

Excel 也不这样做。

Excel 不会对公式进行四舍五入。

我需要返回 500 而不是 501 的公式的上限函数。

我可以改用这个。但我会知道是否有另一种解决方案以及为什么 C# 这样做。

MessageBox.Show(Math.Ceiling(Math.Floor((1 / (4 * 1 - 4 * 0.9) * 200) * 100) / 100).ToString());
4

1 回答 1

6

问题是500实际上不是 500,而是500.0000000001(或类似的东西)由于使用浮点运算。

要解决此问题,请使用decimal代替double.

MessageBox.Show(Math.Ceiling(1.0M / (4.0M * 1.0M - 4.0M * 0.9M) * 200.0M).ToString());

有关更多信息,请参阅每位计算机科学家应了解的浮点运算知识,或查看网站以获得更简单的解释。

于 2014-08-20T19:09:38.553 回答