百木园-与人分享,
就是让自己快乐。

用 JavaScript 算钱时小心精度丢失问题

用 js 计算带小数的加减法时遇到计算精度丢失,导致产生了无限小数。

这种情况常见地令人吃惊,随便用小数进行加减乘除都会出现这种问题:

对基本四则运算的理解在现代计算机面前受到了挑战。

产生浮点数计算精度不准确的原因:

  1. 计算机算的是二进制非十进制,十进制会先转二进制的无限不循环的数,再进行加减;
  2. 计算机可支持浮点数的小数部分可支持到52位。两者相加,再转换成十进制,得到的数有可能出现不准确的情况,加减乘除运算都是这样的原理。

解决:

  1. 将浮点数转为整数运算,再对结果做除法,再根据你的项目要求的精度取小数位
    如 0.1 + 0.2,需要:
let num = ((0.1* 10 + 0.2 * 10) / 10).toFixed(1)

整数运算不可超过 MAX_SAFE_INTEGER (js 能精准表示的最大整数 Math.pow(2, 53),十进制即 9007199254740992)

number-precision 这个库就是使用的这种方案

如果整数运算会超过 MAX_SAFE_INTEGER,则

  1. 将浮点数转为字符串,模拟实际运算过程

使用以下库进行大整数运算

bignumber.js
decimal.js
big.js


2021-12-01


来源:https://www.cnblogs.com/wentommy/p/15927226.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 用 JavaScript 算钱时小心精度丢失问题

相关推荐

  • 暂无文章