想象一下以下情况:数字(10.03
)应该由3
分配。在普通的JavaScript中,这将分别导致3,3433333333
。
我理想中想要的是一种输出包含3个元素的数组的解决方案,该数组包含以下值:
[ 3.34, 3.34, 3.35 ]
我无法解决这个问题。我尝试过的:
const a = 10.03;
const b = 3;
const dist = [];
for (let i = 0; i < b; i++) {
dist.push((a / b).toFixed(2));
}
输出:
[3.34, 3.34, 3.34]
答案 0 :(得分:4)
这是一个更新的版本,按照@Bergi的建议,可以更均匀地分配其余部分。大小取决于minDecimalPlaces
或dividend
的精度;
编辑:@ Bergi改进了性能
function distributedDivision(dividend, divisor, minDecimalPlaces) {
const decimalPlaces = Math.max(
minDecimalPlaces,
(dividend + '.').toString().split('.')[1].length
);
const magnitude = Math.pow(10, decimalPlaces);
const quotient = Math.floor((dividend * magnitude) / divisor);
const result = Array(divisor).fill(quotient);
let i = 0;
for (
let remainder = Math.floor((dividend * magnitude) % divisor);
remainder > 0;
remainder--
) {
result[i]++;
i++;
}
return result.map(v => Math.round(v) / magnitude);
}
console.log(distributedDivision(10.10, 4, 2));
我假设您想要的是一个除数函数,该函数将商数限制为小数位数?
您可以执行以下操作:
function distributedDivision(dividend, divisor, maxDecimalPlaces) {
const magnitude = Math.pow(10,maxDecimalPlaces);
const lesser = Math.round((dividend*magnitude)/divisor)/magnitude;
return (new Array(divisor-1)).fill(lesser).concat(Math.round((dividend-(lesser*(divisor-1)))*magnitude)/magnitude);
}
console.log(distributedDivision(10.03,3,2));
console.log(distributedDivision(10.04,3,2));
console.log(distributedDivision(10.07,4,2));
编辑:一个要求是,maxDecimalPlaces
至少与dividend
中的小数位数一样