为什么0.1+0.2=0.30000000000000004?

215 阅读1分钟

这种情况在很多语言中都有,他并不是一个错误,而是在设计语言时权衡后设置的。JavaScript使用IEEE754双精度(64位),IEEE754制定了浮点数二进制编码规范。由于计算机只能存储0和1,所以浮点数在二进制存储中是无限循环的,在IEEE754中使用64位来表示浮点数,第一位表示符号,后面11位表示指数,剩余位数表示有效位,而在显示时,由于循环数字无法全部被表示,出现了精度丢失问题,0.1就变成了0.100000000000000002。在表示一个浮点数时需要权衡两个方面:数字长度和数字精确度。如果需要更精确的去表示一个浮点数,那么就需要很长的位数去表示它。