【问题标题】:Divide 100 by odd number - Javascript将 100 除以奇数 - Javascript
【发布时间】:2018-06-14 12:12:35
【问题描述】:

我试图将 100 除以一个数字,所以我得到 该数字的百分比放入变量中 放入 FOR ... 并且 FOR 将百分比放入 Array ... 或多或少 这个:

var number = 4
var percentage = 100 / number
var somaPercentual = new Array();
for (i = 0; i < number; i++) {
  var percentage = percentage
  somaPercentual.push(percentage)
}

console.log(somaPercentual)

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

25,25,25,25

所以我需要对所有 Array 值求和并给出 100! 到目前为止一切顺利......当除以 100 的数字是奇数时,头痛就开始了!

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

谁能给我一盏灯?

【问题讨论】:

  • 在考虑代码之前,先从数学角度考虑...如果除数是3,那么可以存在什么3个相同的数字加起来到 100?您想要生成的数组对于 3 是什么样的?
  • 奇数时总是这样? 5个呢?
  • @Jorge.V 或 6
  • @David 嗯,在数学上 0.99999.... 无限数 9 实际上等于 1。问题是在计算机上你不能真正拥有“无限”的任何东西。跨度>
  • 但是.. 但是 100 % 6 =/= 0。

标签: javascript math


【解决方案1】:

对数组元素求和时可以使用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);

【讨论】:

    【解决方案2】:

    如果您不介意其中一个数字有偏差,要找出错误,您可以这样做。

    当它到达最后一个数字时,它会计算出剩下的 100 并推动该数字,而不是再次推动相同的百分比。

    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>

    希望对您有所帮助?

    【讨论】:

    • Ty @Andrew,你救了我的命!效果很好!太棒了!
    【解决方案3】:

    因此,当您将 100 除以任何奇数时。如果它不能完全整除,那么它将存储为 64 位浮点数,因此该值将不准确,当您添加时不会给您准确的 100。 但如果你将它除以一个与 4.234 完全一样的数字,那么当你添加它时,它会给你 100。

    【讨论】:

      【解决方案4】:

      你可以像这样使用“保和轮”

      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));
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多