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

如何将数字数组按比例调整至总和为100?现有代码零值处理异常

解决数组全为0时按比例调整至总和100的问题

嘿,我懂你遇到的这个问题——当数组里全是0的时候,原代码没法输出均分100的结果,反而还是全0。这是因为原代码里的total会变成0,导致remainder / total出现除以0的情况,JavaScript里这会得到Infinity,而0 * Infinity又是NaN,最后return newValue || 0把NaN转成了0,自然就不符合你的预期了。

这里有个修正后的方案,能同时处理普通数组和全0数组的情况:

function grossUpArray(arrayOfNum) {
  // 先计算数组总和,如果你已经有getTotal函数可以直接替换
  const total = arrayOfNum.reduce((acc, curr) => acc + curr, 0);
  
  // 处理全0的特殊情况:直接均分100
  if (total === 0) {
    const equalShare = Number((100 / arrayOfNum.length).toFixed(2));
    return arrayOfNum.map(() => equalShare);
  }
  
  // 普通情况按比例调整
  const remainder = 100 - total;
  return arrayOfNum.map(num => {
    const adjustedValue = num + ((remainder / total) * num);
    // 保留两位小数,和示例输出一致
    return Number(adjustedValue.toFixed(2)) || 0;
  });
}

代码说明:

  • 先判断数组总和是否为0:如果是,直接计算每个元素应得的100 / 数组长度,用toFixed(2)保证结果是两位小数,和你的示例输出格式匹配
  • 非全0的情况沿用你原来的比例调整逻辑,同样加入toFixed(2)来统一小数位数
  • 用Number()把字符串转成数字类型,避免返回字符串格式的数值

测试示例:

  • 输入[0,0,0] → 输出[33.33, 33.33, 33.33]
  • 输入[1,1] → 输出[50,50]
  • 输入[1,2] → 输出[33.33, 66.67]

这样就能完美覆盖所有情况啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:55