理解JavaScript浮点数值!

作者: 前端精髓 | 来源:发表于2017-06-28 23:32 被阅读48次

所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。虽然小数点前面可以没有整数,但我们不推荐这种写法。以下是浮点数值的几个例子:

var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; // 有效,但不推荐

由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数值转换为整数值。显然,如果小数点后面没有跟任何数字,那么这个数值就可以作为整数值来保存。同样地,如果浮点数值本身表示的就是一个整数(如1.0),那么该值也会被转换为整数,如下面的例子所示:

var floatNum1 = 1.; // 小数点后面没有数字——解析为1
var floatNum2 = 10.0; // 整数——解析为10

浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。例如,0.1 加 0.2 的结果不是 0.3,而是 0.30000000000000004 。这个小小的舍入误差会导致无法测试特定的浮点数值。例如:

if (a + b == 0.3){ // 不要做这样的测试!
    alert(“You got 0.3.”);
}

在这个例子中,我们测试的是两个数的和是不是等于 0.3 。如果这两个数是 0.05 和 0.25,或者是 0.15 和 0.15 都不会有问题。而如前所述,如果这两个数是 0.1 和 0.2,那么测试将无法通过。因此,永远不要测试某个特定的浮点数值。

关于浮点数值计算会产生舍入误差的问题,有一点需要明确:这是使用基于IEEE754数值的浮点计算的通病,ECMAScript并非独此一家;其他使用相同数值格式的语言也存在这个问题。


扫描二维码可以关注我的文章!

相关文章

网友评论

  • 鸭梨山大哎:为啥不等于0.3这个你没说明白
    前端精髓: @鸭梨山大哎 关于文章的具体内容可以用微信扫描二维码关注文章的具体内容

本文标题:理解JavaScript浮点数值!

本文链接:https://www.haomeiwen.com/subject/ngmpcxtx.html