为什么0.1不能被精确表示 但是与整数相加 或者相乘正常呢
有人详细说下

下午好🌅🌅🌅
本答案参考通义千问
0.1 在 JavaScript 中 不能被精确表示 的原因,是由于 二进制浮点数的精度限制。这是计算机科学中一个非常经典的问题,涉及到 IEEE 754 浮点数标准。
JavaScript 使用的是 双精度浮点数(64位),遵循 IEEE 754 标准。
双精度浮点数由三部分组成:
因为尾数只有 52 位,所以只能存储一定数量的二进制小数位。对于像 0.1 这样无法用有限二进制位表示的小数,就会出现舍入误差。
console.log(0.1 + 1); // 输出 1.1
console.log(0.1 * 10); // 输出 1
let amount = 0.1; // 表示 0.1 元
let total = (amount * 100) + 100; // 转换为分
console.log(total / 100); // 输出 2
toFixed() 或 Math.round():
console.log((0.1 + 0.2).toFixed(1)); // 输出 "0.3"
| 问题 | 原因 | |------|------| | 0.1 不能被精确表示 | 十进制 0.1 在二进制中是无限循环小数,无法用有限位表示 | | 0.1 与整数相加/相乘看似正常 | 整数部分没有误差,且某些运算结果恰好为整数或误差极小 | | 如何避免误差 | 使用整数计算、Decimal.js 库、或四舍五入处理 |
// 错误示例:0.1 + 0.2 != 0.3
console.log(0.1 + 0.2); // 输出 0.30000000000000004
// 正确示例:使用整数计算
let money = 0.1;
let result = (money * 100 + 200) / 100;
console.log(result); // 输出 3
// 使用 toFixed() 处理
console.log((0.1 + 0.2).toFixed(1)); // 输出 "0.3"
如果你有更多关于浮点数的问题,欢迎继续提问!