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

Java计算平均值时如何避免取整?求正确实现方法

Java整数除法导致平均值取整问题的解决办法

问题场景

我是Java新手,最近做实验任务时遇到一个问题:任务要求编写程序接收任意数量非负整数输入,输入负数时结束(且负数不纳入统计,确保至少有一个非负整数输入),最后输出最大值和保留两位小数的平均值。示例输入15 20 0 3 -1对应输出20 9.50。

我的代码大部分功能正常,但计算平均值时出现取整错误——比如输入2 3 -1,程序输出3 2.00,而正确结果应该是3 2.50。

原代码

int count = 0;
int sumNums = 0;
int totalSumNums = 0;
double average = 0;
int bigNumber = -1;

sumNums = scnr.nextInt();
while (sumNums >= 0) {
    if (sumNums > bigNumber) {
        bigNumber = sumNums;
    }
    totalSumNums = totalSumNums + sumNums;
    count = count + 1;
    sumNums = scnr.nextInt();
}
average = totalSumNums / count;
System.out.print(bigNumber + " ");
System.out.printf("%.2f\n", average);

问题原因

问题出在average = totalSumNums / count;这一行:totalSumNums和count都是int类型,Java中两个整数做除法会执行整数除法——直接舍弃小数部分,只保留整数结果。比如5/2得到的是2而不是2.5,即使把这个结果赋值给double类型的average,也只是把2转换成2.0,自然输出2.00。

解决办法

只需要把其中一个操作数强制转换为double类型,让除法自动提升为浮点数除法,就能得到带小数的正确结果:

average = (double)totalSumNums / count;

这样totalSumNums会先被转换成double,count也会自动提升为double,除法结果就是5.0/2=2.5,最终输出2.50,符合要求。

内容的提问来源于stack exchange,提问作者thatlittlerose

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:35:04