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

不同数据类型数组计算NRR,double数组始终显示0.0000000求排查

解决NRR输出始终为0.0000000的问题

嘿,这个问题我太熟悉了——十有八九是整数除法在搞鬼!咱们一步步拆解原因和修复方法:

核心问题:整数除法导致精度丢失

当你用两个int类型的值做除法时,大多数编程语言(比如C、C++、Java)会执行整数除法:直接舍弃小数部分,只保留整数结果。

举个例子:如果你的NRR计算公式是(总得分差) / (总局数差),假设某支球队得分差是3,局数差是5——3/5用整数除法算出来是0,再把这个0赋值给double类型的NRR数组元素,自然就显示成0.0000000了。哪怕得分差是负数,比如-2/5,整数除法结果还是0,同样会导致NRR为0。

修复方法:强制触发浮点除法

只要把除法操作中的任意一个操作数强制转换成double类型,就能让编译器执行浮点除法,保留小数部分。比如:

错误写法(整数除法)

// 结果是整数除法的结果,再转成double还是0
NRR[i] = (totalRunsFor[i] - totalRunsAgainst[i]) / (totalOversFor[i] - totalOversAgainst[i]);

正确写法(浮点除法)

可以把分子强制转成double:

NRR[i] = (double)(totalRunsFor[i] - totalRunsAgainst[i]) / (totalOversFor[i] - totalOversAgainst[i]);

或者把分母强制转成double:

NRR[i] = (totalRunsFor[i] - totalRunsAgainst[i]) / (double)(totalOversFor[i] - totalOversAgainst[i]);

额外注意:避免除以0的情况

别忘记处理除数为0的场景(比如某支球队还没进行任何比赛,或者总局数差为0),否则会导致程序崩溃。可以加个判断:

int oversDiff = totalOversFor[i] - totalOversAgainst[i];
if (oversDiff != 0) {
    NRR[i] = (double)(totalRunsFor[i] - totalRunsAgainst[i]) / oversDiff;
} else {
    NRR[i] = 0.0; // 或者根据赛事规则设置合适的默认值
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:28:29