javascript - 在 javascript 中添加两个浮点数会产生奇怪的异常
问题描述
问题出现在 checkCashRegister 函数中的 forEach 循环中。
let values = {
"PENNY": 0,
"NICKEL": 0,
"DIME": 0,
"QUARTER": 0,
"ONE": 0,
"FIVE": 0,
"TEN": 0,
"TWENTY": 0,
"ONE HUNDRED": 0,
"TOTAL": 0,
}
function checkCashRegister(price, cash, cid) {
cid.forEach((arr) => {
values[arr[0]] = arr[1];
console.log(`${values["TOTAL"]} + ${arr[1]} = ${values["TOTAL"] + arr[1]}`);
values["TOTAL"] += arr[1];
});
let change = cash - price;
console.log(values);
return change;
}
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]]);
这应该简单地将数组转换为一个对象并计算 values.total 中所有对象字段的总数,但由于某种原因,输出是这样的:
0 + 1.01 = 1.01
1.01 + 2.05 = 3.0599999999999996
3.0599999999999996 + 3.1 = 6.16
6.16 + 4.25 = 10.41
10.41 + 90 = 100.41
100.41 + 55 = 155.41
155.41 + 20 = 175.41
175.41 + 60 = 235.41
235.41 + 100 = 335.40999999999997
{ PENNY: 1.01,
NICKEL: 2.05,
DIME: 3.1,
QUARTER: 4.25,
ONE: 90,
FIVE: 55,
TEN: 20,
TWENTY: 60,
'ONE HUNDRED': 100,
TOTAL: 335.40999999999997 }
为什么 1.01 + 2.05 = 3.0599999999999996 而不是 3.06?简单地将数字四舍五入到最接近的第二个小数点并不难,但我更想知道为什么会出现这个问题。
谢谢。
解决方案
推荐阅读
- reactjs - React 中兄弟之间的通信
- java - org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator 在eclipse中生成java文件
- jquery - 想要建立一个带有子节点和子子节点的可扩展链接的树结构
- visual-studio - node-gyp - 如何生成包含 NatVis 文件的 Visual Studio 项目
- c# - 用于验证数字到小数点后 2 位的正则表达式
- dynamics-crm - 有没有办法更新 CRM 中的字段修改、创建和创建?
- python - 如何让 ImageField 返回相对路径?
- python - Python 3.4 和 3.5 - JsonDecodeError 兼容性
- javascript - 评论字段中 Textarea 的表单验证
- javascript - 在 MVC CheckboxFor 中,如何通过 Javascript 更改选择?