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

如何用JavaScript/jQuery将数值拆分为无小数三等份数组?

整数拆分方案:将数值均分为指定份数且总和严格一致

核心思路

要避免round导致总和超标的问题,关键是先取整除后的基础值,再把余数分配到前几份中:

  • 计算每份的基础值:用Math.floor(total / parts)向下取整,确保不会出现向上取整累加超标的情况
  • 计算余数:total % parts,这个余数就是需要额外加1的份数
  • 前余数份每份加1,剩余份数保持基础值,总和必然与原数值完全相等

JavaScript实现代码

function splitInteger(total, parts = 3) {
  // 边界校验:确保输入为正整数
  if (!Number.isInteger(total) || total < 0 || !Number.isInteger(parts) || parts < 1) {
    throw new Error('总和和份数必须为正整数');
  }
  
  const baseValue = Math.floor(total / parts);
  const remainder = total % parts;
  const result = [];

  for (let i = 0; i < parts; i++) {
    // 前remainder份每份加1,其余保持基础值
    result.push(i < remainder ? baseValue + 1 : baseValue);
  }

  return result;
}

测试示例

拆分800为3份

const splitResult = splitInteger(800);
console.log(splitResult); // 输出: [267, 267, 266]
console.log(splitResult.reduce((sum, num) => sum + num)); // 输出: 800

其他场景测试

  • 拆分799为3份:[267, 266, 266],总和799
  • 拆分600为3份:[200, 200, 200],总和600
  • 拆分5为2份:[3, 2],总和5

为什么round会出问题?

以800为例,800/3≈266.666,用round会得到3个267,总和为801,超出原数值。而用floor取基础值266,再把余数2分配给前2份,每份加1,既保证了每份尽可能平均,又严格控制总和与原数值一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:50:31