Java中Math.ceil()加0.0与不加计算结果不一致问题咨询
Java Math.ceil()结果差异原因说明
核心差异由Java的整数除法规则和运算时的类型自动提升机制导致,两种写法的实际执行逻辑拆解如下:
带
0.0 +的正确计算逻辑0.0是double类型,和int类型的op、cl相加时,int值会自动提升为double类型,后续除法为浮点数除法:(0.0 + op) / 2= 1.0 / 2 = 0.5,Math.ceil(0.5)返回1.0(0.0 + cl) / 2= 11.0 / 2 = 5.5,Math.ceil(5.5)返回6.0- 两者求和得7.0,强转int后结果为7,符合预期。
去掉
0.0 +的错误计算逻辑
此时op、cl均为int类型,除法为整数除法,会直接截断小数部分:op / 2= 1 / 2 = 0(整数除法截断小数),Math.ceil(0)返回0.0cl / 2= 11 / 2 = 5(整数除法截断小数),Math.ceil(5)返回5.0- 两者求和得5.0,强转int后结果为5,就是你遇到的异常结果。
如果不想添加0.0 +,也可以将除数写为2.0(浮点数),同样会触发浮点数除法,得到正确结果,示例:
(int)(Math.ceil(op / 2.0) + Math.ceil(cl / 2.0))
内容的提问来源于stack exchange,提问作者AYUSHI TYAGI
相关产品推荐
相关产品推荐

