Open yuanyuanbyte opened 2 years ago
本系列的主题是 JavaScript 基础,每期讲解一个技术要点。如果你还不了解各系列内容,文末点击查看全部文章,点我跳转到文末。
如果觉得本系列不错,欢迎 Star,你的支持是我创作分享的最大动力。
let n1 = 0.1, n2 = 0.2 console.log(n1 + n2) // 0.30000000000000004
这里得到的不是想要的结果,要想等于0.3,就要把它进行转化:
(n1 + n2).toFixed(2) // '0.30' 注意,toFixed为四舍五入
JS中如何进入浮点数运算?
使用bignumber进行运算,BigNumber.js是一个用于任意精度计算的js库。
那为什么会出现这样的结果呢?
计算机是通过二进制的方式存储数据的,所以计算机计算0.1+0.2的时候,实际上是计算的两个数的二进制的和。0.1和0.2的二进制都是四位无限循环的数。
0.00011001100110011001100110011001100110011001100110011
0.0011001100110011001100110011001100110011001100110011011
JS采用的浮点数标准却会裁剪掉我们的数字。
这些循环的数字被裁剪了,就会出现精度丢失的问题,也就造成了 0.1 不再是 0.1 了,而是变成了 0.100000000000000002
0.100000000000000002 === 0.1 // true
那么同样的,0.2 在二进制也是无限循环的,被裁剪后也失去了精度变成了 0.200000000000000002
0.200000000000000002 === 0.2 // true
所以这两者相加不等于 0.3 而是 0.300000000000000004
查看全部文章
各系列文章汇总:https://github.com/yuanyuanbyte/Blog
我是圆圆,一名深耕于前端开发的攻城狮。
本系列的主题是 JavaScript 基础,每期讲解一个技术要点。如果你还不了解各系列内容,文末点击查看全部文章,点我跳转到文末。
如果觉得本系列不错,欢迎 Star,你的支持是我创作分享的最大动力。
为什么0.1+0.2 ! == 0.3,如何处理
这里得到的不是想要的结果,要想等于0.3,就要把它进行转化:
JS中如何进入浮点数运算?
使用bignumber进行运算,BigNumber.js是一个用于任意精度计算的js库。
计算机是通过二进制的方式存储数据的,所以计算机计算0.1+0.2的时候,实际上是计算的两个数的二进制的和。0.1和0.2的二进制都是四位无限循环的数。
0.00011001100110011001100110011001100110011001100110011
,0011 四位无限循环;0.0011001100110011001100110011001100110011001100110011011
,0011 四位无限循环。JS采用的浮点数标准却会裁剪掉我们的数字。
这些循环的数字被裁剪了,就会出现精度丢失的问题,也就造成了 0.1 不再是 0.1 了,而是变成了 0.100000000000000002
那么同样的,0.2 在二进制也是无限循环的,被裁剪后也失去了精度变成了 0.200000000000000002
所以这两者相加不等于 0.3 而是 0.300000000000000004
查看全部文章
博文系列目录
交流
各系列文章汇总:https://github.com/yuanyuanbyte/Blog
我是圆圆,一名深耕于前端开发的攻城狮。