为什么这不会给出预期的结果?
console.log(0.2+0.1); // gives 0.30000000000000004
console.log(0.2+0.3); // gives 0.5
console.log(0.2+0.5); // gives 0.7
console.log(0.2+0.4); // gives 0.6000000000000001
为什么first
andlast
不会给出预期的结果?
为什么这不会给出预期的结果?
console.log(0.2+0.1); // gives 0.30000000000000004
console.log(0.2+0.3); // gives 0.5
console.log(0.2+0.5); // gives 0.7
console.log(0.2+0.4); // gives 0.6000000000000001
为什么first
andlast
不会给出预期的结果?
这是因为JavaScript
使用了IEEE Standard
for Binary Floating-Point Arithmetic
。
一切floating point math
都是这样,基于IEEE 754 standard
. JavaScript 使用64-bit floating point representation
,这与 Java 的double
.
试试看.toFixed()
。这个方法格式化一个小数点右边有特定位数的数字。
console.log((0.2 + 0.1).toFixed(1)); // gives 0.3
console.log((0.2 + 0.3).toFixed(1)); // gives 0.5
console.log((0.2 + 0.5).toFixed(1)); // gives 0.7
console.log((0.2 + 0.4).toFixed(1)); // gives 0.6