javascript - float和int之和返回不寻常的小数位js

标签 javascript arrays floating-point integer

<分区>

我为我的某个项目编写了代码,我在其中添加了几个数字。在此过程中,我从数组中添加整数和 float 。直到数组的最后一个元素,总和具有适当的小数位数。但是在最后一个元素,总和突然给了我很多小数位。与前一个和相加的数字和和本身的小数点后不到 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 函数将其四舍五入。但是,我想了解为什么会这样。

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

最佳答案

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

Numbers in JavaScript are "double-precision 64-bit format IEEE 754 values", according to the spec. This has some interesting consequences. There's no such thing as an integer in JavaScript, so you have to be a little careful with your arithmetic if you're used to math in C or Java.

Also, watch out for stuff like:

0.1 + 0.2 == 0.30000000000000004;

In practice, integer values are treated as 32-bit ints, and some implementations even store it that way until they are asked to perform an instruction that's valid on a Number but not on a 32-bit integer. This can be important for bit-wise operations.

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

关于javascript - float和int之和返回不寻常的小数位js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856902/

相关文章:

javascript - 屏幕解锁后如何在 iOS8 网络应用程序上恢复 JavaScript 计时器?

javascript - AngularJS 中的多个自定义过滤器

javascript - 如何逐步构建和拆除 JavaScript 对象?

performance - 具有性能优化潜力的浮点算法

c++ - 使用高斯消元法计算矩阵的逆时非常不准确

javascript - 使用 Jquery 一次显示一个数据

javascript - 从一个页面调用 session 到另一个页面并将其包含在 javascript 中

java - 从字符串创建二维数组

C fscanf 跳转值

Python3 分区 : return int when there's no remainder and a float when there is a remainder?