You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:33:45