浮点数计算精度误差原理随记

场景

0.1 + 0.2 = 0.30000000000000004

原因

以下摘自 https://www.cnblogs.com/wymbk/p/6031442.html

首先,我们要站在计算机的角度思考 0.1 + 0.2 这个看似小儿科的问题。我们知道,能被计算机读懂的是二进制,而不是十进制,所以我们先把 0.1 和 0.2 转换成二进制看看:

0.1==》0.1.toString(2)==》0.0001100110011(无限循环..)

0.2==》0.2.toString(2)==》0.001100110011(无限循环..)

双精度浮点数的小数部分最多支持 52 位,所以两者相加之后得到这么一串 0.0100110011001100110011001100110011001100110011001100 因浮点数小数位的限制而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。
`

总结

十进制浮点数转二进制会无限循环,单双精度长度限制问题导致截断后出现误差