解决js计算精度问题

发布时间:2024年01月18日

问题

由于浮点数存在计算精度问题,常用的办法是四舍五入保留2位小数来解决。但是在向上、向下保留小数的时候,比如:0.1+0.2=0.30000000000000004,向上保留2位小数就变成了0.31

解决办法

使用 js-big-decimal 计算浮点数

安装

npm i js-big-decimal -S

封装方法?/utils/big-decimal.js

import bigDecimal from "js-big-decimal";

export default {
  // 声明
  state(number) {
    return new bigDecimal(number);
  },
  // 加
  add(number1, number2) {
    return bigDecimal.add(number1, number2);
  },
  // 减
  subtract(number1, number2) {
    return bigDecimal.subtract(number1, number2);
  },
  // 乘
  multiply(number1, number2) {
    return bigDecimal.multiply(number1, number2);
  },
  // 除
  // precision: 精确度,默认最多保留8位小数
  divide(number1, number2, precision = 8) {
    // 添加number,移除小数末尾多余0
    return Number(bigDecimal.divide(number1, number2, precision));
  },
  /**
   * 保留小数
   * length: 小数位长度,默认两位小数
   * option:选项,默认四舍五入
   *   HALF_EVEN 四舍五入
   *   CEILING 向上取
   *   DOWN 向下取
   */
  round(number, length = 2, option = "HALF_EVEN") {
    const num = new bigDecimal(number);
    return num.round(length, bigDecimal.RoundingModes[option]).getValue();
  },
  // 绝对值
  abs(number) {
    return bigDecimal.abs(number);
  },
  // 向上取整
  ceil(number) {
    return bigDecimal.ceil(number);
  },
  // 向下取整
  floor(number) {
    return bigDecimal.floor(number);
  },
};

使用

import decimal from '@/utils/big-decimal';
decimal.add(0.1, 0.2);
文章来源:https://blog.csdn.net/bocongbo/article/details/135672156
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。