关于0.3-0.2 != 0.1 的问题

这个问题,是我在用js项目开发的过程中,进行数值比较的时候,debugger发现数值不对,因此再去深入了解了这个问题点。

首先可以先看一个demo:

我在页面写了如下几行js代码

关于0.3-0.2 != 0.1 的问题_第1张图片

之后我在chrome调试页面查看:

关于0.3-0.2 != 0.1 的问题_第2张图片

对,就是这个现象,0.3 - 0.2 = 0.0999999999998

然后我去查阅了资料:

这是为什么呢?在《Javascript权威指南》中有提到,JS是不区分整数和浮点数的,JS采用的是IEEE 754标准定义的64位浮点格式表示数字,所以JS中的所有数字都是浮点数。按照JS的数字格式,整数有的范围是-2^53 ~ 2^53,而且只能表示有限个浮点数,能表示的个数为2^64 − 2^53 + 3

以上这段是我在google搜索中找到的解释。我们都知道,js是一门弱类型的语言,它不区分整数和浮点数,而浮点数,从纯数学的角度去理解,它是无穷个的,所以没有办法进行精确的表示实际上这并不是JavaScript仅有的问题,C/C++/Java甚至Matlab都有这个问题。

然而在js 里面我们怎么处理呢?办法很简单,根小时候做数学题一样,规定精确到小数点后几位就行了。我们用:

number.toFixed(x)

关于0.3-0.2 != 0.1 的问题_第3张图片

我们规定他的精度,采用以上方法就行了。

这样我们之前demo中的第一行代码的执行结果就是0.1了。




你可能感兴趣的:(HTML&JavaScript)