Java教程

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

本文主要是介绍用 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

这篇关于用 JavaScript 算钱时小心精度丢失问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!