用奇数除以100 - Javascript

时间:2018-06-14 12:12:35

标签: javascript math

我试图用数字除以100,所以我得到了 放入变量的那个数字的百分比 进入FOR ...并且FOR将百分比放入数组......或多或少这个:

25,25,25,25

在这种情况下,我的数组会出现:

{{1}}

所以我需要将所有数组值相加并给出100! 到目前为止一直这么好......当被除以100的数字是一个奇数时,头痛开始了!

如果变量数等于3,例如,我的数组将给出= 33.33,33.33,33.33,其中总和将给出99.99 ....然后搞砸了! 当数字为奇数时,总会发生这种情况。

任何人都可以给我一个亮点吗?

4 个答案:

答案 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;
&#13;
&#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));
}