我正在为一个学校项目(自行车工厂)编写一个库存/生产程序,我必须将一些数字四舍五入,例如必须生产的自行车(由于后果,它是双倍的)。
如果我使用下面的代码:
double test = Math.Ceiling(100 * 1.09);
label75.Text = Convert.ToString(test);
我得到的答案是 110,但这是不对的,它应该是 109(100 的 9%)。尽管它似乎适用于低于 9% 的值。
我做错了什么?
最佳答案
double
和 float
是二进制浮点类型。这意味着它们不能精确表示许多十进制数字(如 1.09
)。这会导致一些细微的舍入错误。在您的情况下,100 * 1.09 实际上会产生一个比 109 稍大的数字,因此 Ceiling
函数正确地将其四舍五入为最接近的整数 110。
将其更改为十进制
,您将得到您期望的结果:
decimal test = Math.Ceiling(100 * 1.09m); // 109
请注意 1.09m
中的 m
将其标识为 decimal
文字。这是可行的,因为 decimal
类型专门设计用于表示十进制数(而不是像 double
和 float
那样只是它们的二进制近似值)。
关于c# - 舍入 c# 给出错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18751156/