Android小数计算结果异常:道路可停放卡车数量计算值与预期不符
问题根因
这是Java整数运算规则导致的:
- 代码中
road1为int类型,参与运算的10、20均为整型字面量,因此(road1 - 10) / 20全程执行整数除法,运算结果会直接截断小数部分,130除以20得到的整数结果为6。 - 后续将整数
6赋值给double类型的trucks变量时,仅会做整型到浮点型的类型转换,得到6.0,不会还原被截断的小数部分。
修复方案
只要让运算触发浮点除法即可,常见实现方式如下:
- 方案1:将除数改为浮点型字面量
trucks = (road1 - 10) / 20.0;
- 方案2:对被除数做强制浮点类型转换
trucks = (double) (road1 - 10) / 20;
- 方案3(更易维护):提前定义业务相关的浮点常量
// 预留道路长度,单位:米 final double RESERVED_ROAD_LENGTH = 10.0; // 单台卡车所需车位长度,单位:米 final double PER_TRUCK_SPACE_LENGTH = 20.0; trucks = (road1 - RESERVED_ROAD_LENGTH) / PER_TRUCK_SPACE_LENGTH;
补充业务优化建议:实际场景中卡车无法拆分停放,可根据需求选择
Math.floor()(向下取整得到实际可停整车数)、Math.round()(四舍五入)等方法对结果做取整处理。
内容的提问来源于stack exchange,提问作者Giovanni
相关产品推荐
相关产品推荐

