Pat*_*ick 0 c# math double excel ceil
为什么围绕C#这个计算?
500 - > 501
MessageBox.Show(Math.Ceiling(1 / (4 * 1 - 4 * 0.9) * 200).ToString());
Run Code Online (Sandbox Code Playgroud)
回报.
---------------------------
---------------------------
501
---------------------------
OK
---------------------------
Run Code Online (Sandbox Code Playgroud)
我不知道为什么.
Excel也不会这样做.

我需要公式的天花板功能,它返回500而不是501.
我可以用它代替.但我知道是否有另一种解决方案以及为什么C#会这样做.
MessageBox.Show(Math.Ceiling(Math.Floor((1 / (4 * 1 - 4 * 0.9) * 200) * 100) / 100).ToString());
Run Code Online (Sandbox Code Playgroud)
问题是,500是其实不是 500,而是500.0000000001由于使用浮点运算(或类似的东西).
要解决此问题,请使用decimal而不是double.
MessageBox.Show(Math.Ceiling(1.0M / (4.0M * 1.0M - 4.0M * 0.9M) * 200.0M).ToString());
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅每个计算机科学家应该了解的有关浮点运算的内容,或者查看本网站以获得更简单的解释.