js精度
js种的小数与整数都是number类型
具体存储遵循IEEE 754
js采用64位 双精度浮点数的方式存储
十进制
10
0.1
10 / 2 = 5 …0
5 / 2 = 2 … 1
2 / 2 = 1 … 0
1 / 2 = 0 … 1
0.1 * 2 = 0.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 1.2
…
二进制
1010 -> 1.01 * 10^3
0.000110011001100110011… ->1.1001 … * 2^-4
64位
最高 1 位 符号位 0 表示正数 1 表示负数
往后 11 位 指数位 如2^3 指数为就要存3 但是此时要加上(2 ^11 - 1) 也就是要加上1023 然后转换为2进制 3 + 1023 = 1026 -4 + 1023 = 1019
符号位 指数位 有效数
符号位 指数位 有效数
0 10000000010 0100000000000000000000000000000000000000000000000000 -> 10
0 01111111011 1001100110011001100110011001100110011001100110011001 1001 -> 0.1
10 进位
0 01111111100 1001100110011001100110011001100110011001100110011001 1001 -> 0.2
二进制1进0舍 所以
1001 9
1010 10
所以0.1在计算机中会大一点
所以0.2在计算机中也会大一点
解决方法
使用toFiex 保留几位小数 然后用parseFloat把字符串转化位数字