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

Android中Java整数除法导致胜率计算结果为0的问题排查

Java整数除法导致计算结果为0的原因及解决方法

问题原因

你遇到的是Java的整数除法特性:当两个整数进行除法运算时,Java会直接舍弃小数部分,只保留整数商。

比如2 / (2+1)也就是2/3,结果是0(小数部分被直接舍弃),再乘以100自然还是0。

解决方案

有两种常用的修复方式:

1. 引入浮点数运算

将除法中的任意一个整数转为浮点数(比如double类型),让运算转为浮点除法保留小数部分,最后再转成整数类型:

// 针对你测试的代码
long ratio = (long) (2.0 / (2 + 1) * 100);

// 针对你注释掉的业务代码(使用wonCount和lostCount)
long ratio = (long) (((double)wonCount / (wonCount + lostCount)) * 100);

这样2.0/3的结果是0.666...,乘以100后是66.666...,转成long类型后得到66。

2. 调整运算顺序(先乘后除)

如果不想用浮点数,可以先做乘法再做除法,避免先得到小于1的整数商:

// 测试代码示例
long ratio = 2 * 100 / (2 + 1);

// 业务代码示例
long ratio = (long)wonCount * 100 / (wonCount + lostCount);

这里2*100=200,200/3=66(整数除法取整),结果符合预期。注意要警惕整数溢出:如果wonCount数值很大,直接用int类型计算wonCount*100可能超出范围,所以最好把wonCount转为long再运算。

修改后的完整代码示例

public void count() {
    // 推荐用浮点数转换的方式,避免溢出且精度更可控
    long ratio = (long) (((double)wonCount / (wonCount + lostCount)) * 100);
    timesWon.setText("You Were Right " + wonCount + " Times");
    timesLost.setText("You Were Wrong " + lostCount + " Times");
    statistics.setText("Win/Loss Ratio: " + String.valueOf(ratio) + "%");
    firstTime = false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:22:39