Java中double输出被向下取整的原因排查及解决方法
问题原因与修复方案:整数除法导致均值计算错误
这是个很常见的Java整数运算陷阱,咱们来一步步拆解问题:
问题根源
你的代码里,total是int类型,dataSet.length也是int类型(数组长度永远是整数)。在Java中,两个整数相除会执行整数除法——它会直接截断结果的小数部分,只保留整数商。
你的总和total是1+2+3+4=10,10除以4的整数结果是2,之后这个int类型的2被自动转换为double类型,就变成了2.0,这就是为什么你得到的结果不是预期的2.5。
修复方案
有两种简单的方式解决这个问题,核心都是让除法操作变成浮点除法:
方案1:强制转换其中一个操作数为double
把总和total或者数组长度转成double,这样Java会自动把另一个操作数也提升为double,执行浮点除法:
int[] dataSet = {1,2,3,4}; int total = 0; for(int temp : dataSet){ total += temp; } double mean = (double)total / dataSet.length; // 将total强制转为double System.out.println(mean); // 输出2.5
方案2:用double类型存储总和
直接把total定义为double类型,这样累加过程中就会保持浮点精度,最后除法自然是浮点运算:
int[] dataSet = {1,2,3,4}; double total = 0; // 改为double类型 for(int temp : dataSet){ total += temp; } double mean = total / dataSet.length; System.out.println(mean); // 输出2.5
补充说明
Java的类型提升规则:当不同数值类型进行运算时,会自动将范围小的类型提升为范围大的类型。比如double的范围比int大,所以当double和int运算时,int会被提升为double,运算结果也是double,这样就能保留小数部分了。
内容的提问来源于stack exchange,提问作者Sidharth D
相关产品推荐
相关产品推荐

