JavaScript中所有的数字都是双精度浮点数
typeof 17; // "number"
typeof 98.6; //"number"
typeof - 2.1; //"number"
JavaScript不会直接将操作数作为浮点数进行运算,而是会将其隐式地转换为32位整数后进行计算。
8 | 1; // 9
1000 | 0001; // 1001
警惕浮点数的不精确
0.1 + 0.2; // 0.30000000000000004
(0.1 + 0.2) + 0.3; // 0.6000000000000001
0.1 + (0.2 + 0.3); // 0.6
解决方法是尽可能地采用整数值进行运算,当进行货币相关的计算时,通常会按比例转换为最小的货币单位来表示再进行计算。使用类库来进行数学计算例如decimal.js等
提示
- JavaScript的数字都是双精度的浮点数。
- JavaScript中的整数仅仅是双精度浮点数的一个子集,而不是一个单独的数据类型。
- 位运算符将数字视为32位的有符号整数。
- 当心浮点运算中的精度陷阱。