float和int的总和返回不寻常的小数位js

时间:2018-02-18 21:42:03

标签: javascript arrays floating-point integer

我为我的某个项目编写了一个代码,我在其中添加了几个数字。在这个过程中,我从数组中添加整数和浮点数。直到数组的最后一个元素,总和具有适当的小数位数。但在最后一个元素,总和突然给了我很多小数位。添加到前一个总和的数字和总和本身的小数位数少于3个,但最终总和的小数位数超过3个。这是代码。它在JS中。

function checkCashRegister(price, cash, cid) {
  var change = 0, cidSum = 0;
  change = cash - price;
  console.log(change);
  console.log(cid.length);
  for ( var i = 0; i < cid.length; i++ ){
    console.log("number " + cid[i][1]);
    cidSum += cid[i][1];
    console.log("sum " + cidSum);
  }
  console.log(cidSum);
  // Here is your change, ma'am.
  return change;
}

// Example cash-in-drawer array:
// [["PENNY", 1.01],
// ["NICKEL", 2.05],
// ["DIME", 3.10],
// ["QUARTER", 4.25],
// ["ONE", 90.00],
// ["FIVE", 55.00],
// ["TEN", 20.00],
// ["TWENTY", 60.00],
// ["ONE HUNDRED", 100.00]]

checkCashRegister(19.50, 20.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]);

这是结果

0.5
9
number 1.01
sum 1.01
number 2.05
sum 3.0599999999999996
number 3.1
sum 6.16
number 4.25
sum 10.41
number 90
sum 100.41
number 55
sum 155.41
number 20
sum 175.41
number 60
sum 235.41
number 100
sum 335.40999999999997
335.40999999999997

在这里你可以看到,235.41和100的总和给出335.4099999 ...... 我知道我可以使用toFixed函数将其四舍五入。但是,我想了解为什么会这样。

请原谅我,如果我的英语是生的,或者我问的是一个愚蠢的问题,我是来自第三世界国家的初学者,只是想学习。

1 个答案:

答案 0 :(得分:1)

&#13;
&#13;
let x = 0.1 + 0.2; // 0.30000000000000004
x = parseFloat(x.toFixed(2)); // Number of places, rounded.
console.log(x); // 0.3
&#13;
&#13;
&#13;

  

JavaScript中的数字是&#34;双精度64位格式IEEE 754   价值&#34;,根据规范。这有一些有趣的   后果。 JavaScript中没有整数这样的东西,所以   如果你已经习惯了,你必须要小心算术   数学用C或Java。

     

另外,请注意以下内容:

     

0.1 + 0.2 == 0.30000000000000004;

     

实际上,整数值被视为32位整数,有些实现甚至将其存储起来   方式,直到他们被要求执行一个有效的指令   数字但不是32位整数。这对于逐位来说很重要   操作

https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript