Skip to content
On this page

为什么0.1+0.2 !== 0.3

JS基于 IEEE 754 标准的浮点数运算,计算机可支持浮点数的小数部分可支持到52位,所有两者相加,在转换成十进制,得到的数就不准确了

解决方案:math.js, bignumber.js, decimal.js, big,js...

十进制小数转二进制小数(采用 ×2 取整法)

对小数点以后的数乘以2,得出结果,取结果的整数部分(不是 0 就是 1),然后再对结果的小数点以后的数乘以2,得出结果,再取结果整数部分,再然后然后再对结果的小数点以后的数乘以2。。。。无限循环

0.1 + 0.2

img

​ 0.1和0.2转成二进制都是无限循环的,超过了最大位数,所以存储时只能通过近似值去存储他们,那自然的,当0.1 + 0.2时,近似值转十进制肯定也是近似值,所以造成误差,最大位数是根据硬盘内存大小决定的,所以一般硬盘内存越大,精确度越高。

整数、负整数十进制转二进制

1、整数:

除二取余,然后倒序排列,高位补零

2、负整数:

  • 把正整数转二进制
  • 对二进制取反
  • 对取反后的二进制加1

Released under the MIT License.