Обновлено:
Вот более новая версия, которая распределяет остаток более равномерно, как предложено @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