我试图用数字除以100,所以我得到了 放入变量的那个数字的百分比 进入FOR ...并且FOR将百分比放入数组......或多或少这个:
25,25,25,25
在这种情况下,我的数组会出现:
{{1}}
所以我需要将所有数组值相加并给出100! 到目前为止一直这么好......当被除以100的数字是一个奇数时,头痛开始了!
如果变量数等于3,例如,我的数组将给出= 33.33,33.33,33.33,其中总和将给出99.99 ....然后搞砸了! 当数字为奇数时,总会发生这种情况。
任何人都可以给我一个亮点吗?
答案 0 :(得分:5)
总结数组元素时,可以使用Math.round()
。这总是会使总和达到100
function sum(number){
var percentage = 100 / number;
var somaPercentual = new Array();
for (i = 0; i <number; i ++) {
somaPercentual.push(percentage);
}
console.log(somaPercentual);
var sum = 0;
somaPercentual.forEach(item => sum+=item);
console.log(Math.round(sum));
}
sum(3);
sum(4);
sum(5);
sum(6);
&#13;
答案 1 :(得分:2)
如果你不介意其中一个数字有点偏,要拿起错误,你可以做这样的事情。
当它达到最后一个数字时,它会计算出剩余的数量,然后再推动它而不是相同的百分比。
document.querySelector('button').addEventListener('click', () => {
var number = document.querySelector('input').value;
var percentage = 100 / number
var somaPercentual = new Array();
for (i = 0; i < number; i++) {
i < number - 1 ?
somaPercentual.push(percentage) :
somaPercentual.push(100 - somaPercentual.reduce((a, b) => {
return a + b
}));
}
console.log(somaPercentual)
console.log(somaPercentual.reduce((a, b) => {
return a + b
}))
})
<input type="number" value="3" />
<button>calc</button>
我希望你能找到这个有用的
答案 2 :(得分:0)
所以当你将100除以任何奇数时。如果它不能完全整除,那么它将被存储为64位浮点数,因此该值将不准确,当您添加时不会给出精确的100。 但如果你将它除以一个与4.234完全相同的数字,那么当你加上它时会给你100个。
答案 3 :(得分:0)
你可以像这样使用“保存轮”
console.clear();
function getPercentuals(number) {
var roundingError = 0.0;
var somaPercentual = new Array();
for (i = 0; i < number; i++) {
var percentageExact = 100 / number;
var percentageRound = round(percentageExact);
roundingError += percentageExact - percentageRound;
if (roundingError > 0.01) {
percentageRound = round(percentageRound + 0.01);
roundingError -= 0.01;
} else if (roundingError < -0.01) {
percentageRound = round(percentageRound - 0.01);
roundingError += 0.01;
}
somaPercentual.push(percentageRound)
}
return somaPercentual;
}
function round(number) {
return Math.round(number * Math.pow(10, 2)) / Math.pow(10, 2);
}
for (num = 1; num <= 100; num++) {
var somaPercentual = getPercentuals(num);
var sum = 0;
somaPercentual.forEach(item => sum += item);
console.log(num, somaPercentual, Math.round(sum));
}