(Java) 为啥 Math.ceil(15/10) 是 1.0 而不是 2.0?

Posted

技术标签:

【中文标题】(Java) 为啥 Math.ceil(15/10) 是 1.0 而不是 2.0?【英文标题】:(Java) why is Math.ceil(15/10) is 1.0 and not 2.0?(Java) 为什么 Math.ceil(15/10) 是 1.0 而不是 2.0? 【发布时间】:2013-03-26 17:15:02 【问题描述】:

为什么是 Math.ceil(15/10) 1.0 而不是 2.0 ? 当我改为运行 Math.ceil((double)15/10) 时,我得到了预期的 2.0。

【问题讨论】:

改用Math.ceil(15f/10) 【参考方案1】:

因为一个整数除以另一个整数会得到一个整数:15/101

来自the specification:

整数除法向 0 舍入。也就是说,产生的商 二进制数值提升后的整数操作数 n 和 d (§5.6.2) 是一个整数值 q,其大小尽可能大 同时满足|d·q| ≤ |n|。此外,当 |n| 时 q 为正≥ |d| 并且 n 和 d 具有相同的符号,但是当 |n| 时 q 为负≥ |d|和 n 和 d 有相反的符号。

您应该使用Math.ceil(15.0/10)Math.ceil(15f/10)(第一个使用双精度,第二个使用浮点)。

【讨论】:

谢谢。你是一个了不起的人。

以上是关于(Java) 为啥 Math.ceil(15/10) 是 1.0 而不是 2.0?的主要内容,如果未能解决你的问题,请参考以下文章

[C/JAVA] ceil, floor

java小数取整

java Math.ceil int向上取整 不对 正确用法

4java 中的 Math.round(-1.5) 等于多少?

Java关于Math类的三个取整方法

java中常用到的math方法(Math.PIMath.random()Math.abs(double)Math.floor(double)Math.ceil(double)Math.rou