C#Math.Ceiling将事件加倍...(500到501)(公式)

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也不会这样做.

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)

Thr*_*eFx 6

问题是,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)

有关详细信息,请参阅每个计算机科学家应该了解的有关浮点运算的内容,或者查看网站以获得更简单的解释.