踩坑:js 小数运算出现精度问题
作者: dkvirus 发表于: 2019-01-17 18:12:00 最近更新: 2019-01-31 21:00:38

背景

在学习小程序商城源码时发现了这个问题,单价可能出现小数,小数之间运算结果会莫名其妙多出一大串数字,比如下面这样👇。

小数运算精度丢失

在此之前我是知道 js 中著名的 0.1 + 0.2 != 0.3 的问题的,可是在自个写项目时压根从来没注意过小数运算可能出现的问题。写这篇文章希望以后能牢记于心。

小数运算并不总会丢失精度

上面可以看到 并不是所有小数运算都会出现精度丢失问题,小数运算为什么会出现精度丢失?

原因

小数转二进制规则

上面是小数转二进制规则,对 0.1 做运算之后得到

0.000 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 (1100)......

后面 1100 是无限循环的,计算机存储数据会给指定大小,比如 double 类型会给 64 个字节来存储,这就意味着上面那串数字得截取,变成了:

0.000 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1101

注意看最后四位本来是 1100,因为截取变成了 1100。(在线进制转换可以验证结果)

运算精度出现问题的根本原因也就在于此。

首页
友链
归档
dkvirus
动态
RSS