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

JS将数字均等拆分存入数组结果异常如何修复

数字均等拆分问题修复

问题表现

需求是把指定数字做均等拆分,拆分后的数值按顺序存入数组。比如把100均等拆成4份,预期输出是[25, 25, 25, 25],但跑现有代码出来的结果是[28, 24, 24, 24],完全不符合预期。

原有错误代码

const divide = () => {
  var number = 100
  var n = 4

  var values = []
  while(number > 0 && n > 0){
    var a = Math.floor(number / n / 4) * 4
    number -= a
    n--
    values.push(a)
  }

  console.log(values)
}

问题根因

原有逻辑从根上就写错了:

  • 算单份值的时候平白无故多了/4和*4的操作,强行把每份值对齐到4的倍数,这个规则和均等拆分没有任何关系
  • 循环取整的时候没有把计算产生的余数均匀分配,最后剩下的数值全堆到了最后一次计算的结果里,拆出来的数自然大小不一

修复代码

下面的写法兼容整除和不能整除两种场景,拆出来的数最大差值不超过1,总和和原数字完全一致:

const divide = () => {
  const total = 100
  const splitCount = 4
  const values = []
  // 先算每份的基础值
  const base = Math.floor(total / splitCount)
  // 算整除后剩下的余数
  let rest = total - base * splitCount

  for (let i = 0; i < splitCount; i++) {
    // 余数依次分给前面的元素,每份最多加1,保证尽可能均等
    if (rest > 0) {
      values.push(base + 1)
      rest--
    } else {
      values.push(base)
    }
  }

  console.log(values) // 输出[25, 25, 25, 25],符合预期
}

如果业务场景里能保证传入的数字一定能被拆分份数整除,逻辑可以更简单:

const divide = () => {
  const total = 100
  const splitCount = 4
  const perValue = total / splitCount
  const values = new Array(splitCount).fill(perValue)
  console.log(values)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:48:19