小数在JS中表示怎么不准确

JS用64位来进行数字的表示,但是对于小数的表示却力不从心,即使对于我们最熟悉的小数表示起来都比较困难,当然是计算机本来就存在的问题。

如 0.1 +0.2=0.30000000000000004(JS的计算结果)。

出现这种结果的原因在于计算机本质上只能是存储0和1的,对于整数来说,使用十进制转换为二进制的方法是“除2取余,逆序排列”,表示起来毫无压力。

但是对于小数用二进制来表示,方法是不同的——"乘2取整,顺序排列"。

举个“栗子”:

将0.45进行二进制表示,

0.45*2=0.9   取整为0

0.9*2=1.8     取整为1

0.8*2=1.6     取整为1

0.6*2=1.2     取整为1

0.2*2=0.4     取整为0

...直到小数部分为0,显然这里会无限循环下去。‘

所以一般会取前面的十几位二进制数尽量接近表示0.45。

由于这种计算的规则,从而对于不等于1/2^n(n>=1,n为整数)的小数,二进制是不能精确表示的。

对于像金融类行业需要精确数字的,一般是需要要分数的形式表示相应小数的。

你可能感兴趣的:(小数在JS中表示怎么不准确)