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

为什么把C#这个计算加起来呢?

500 – > 501

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

回报。

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

我不知道为什么。

Excel也不这样做。

Excel不会绕过这个公式。

我需要天花板function,而返回500,而不是501。

我可以用它来代替。 但是,我会知道是否有另一个解决scheme,为什么C#这样做。

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

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

要解决这个问题,请使用decimal而不是double

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

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