很多编程语言都有至少两种数值型的数据类型,通常它们用int表示整数,float表示浮点数。但是在javascript里面只有一种数值类型!

在javascript里面,所有数值都是双精度浮点数。

对数字使用toString()可以看到它们的二进制序列:
(8).toString(2); // “1000”

浮点数不精确,一些简单的运算会产生不正确的结果:

0.1 + 0.2; // 0.30000000000000004
《Effective JavaScript》读书笔记——理解JavaScript的浮点数

至于为什么会出错?这是由于浮点数精度的问题。0.1在十进制的思维里面是1/10,但是如果用二进制表示,是一个无限循环小数。而计算机最后只能取近似值。
类似的有:

《Effective JavaScript》读书笔记——理解JavaScript的浮点数

《Effective JavaScript》读书笔记——理解JavaScript的浮点数

所以,在进行有精度要求的运算时,比如金融类的Node后台,就要小心了。最优的做法是尽量使用整数进行运算,比如货币计算,就把数值转换成最小的货币单位来进行运算。

相关文章: