【发布时间】:2019-11-28 13:56:25
【问题描述】:
出于某种原因,ceil(x) 将整数四舍五入为 x+1。
例如:
double og_grade = 50;
double fact_grade = ceil(og_grade*1.1);
og_grade*1.1 应该是 55.0000,但 ceil(og_grade*1.1) 返回 56.0000
请注意,og_grade 始终是一个整数。
【问题讨论】:
-
你说 og_grade*1.1 == 55.0000.... - "...." 后面是什么?是 55.0000....01 吗?
-
@WillihamTotland:不,那是个坏方法。 Java 中有一个臭名昭著的舍入错误,直到版本 5 才被修复,该错误被归结为该方法。
ceil、floor和round出现在 C 标准库中是有充分理由的。 -
55*1.1结果为55.00000000000000710542735760100185871124267578125,因此ceil返回56是正确的。 ideone.com/74a7IE -
@mch,假设 IEEE754
double。 -
@Hanik:要解决此问题,请考虑修改您的代码以使用整数或fixed point arithmetic。浮点数学很适合科学计算,但否则会很糟糕;例如,您永远不应该尝试使用浮点数学来表示货币。