解决js 浮点数 精度丢失问题

一、背景

我们都知道js是有精度问题的,如下图所示:

在一些金额的计算时,对于精度要求的需要比较精准,所以这个时候,我们是需要特殊进行处理的,所以这个时候就引入了decimal.js.

二、decimal介绍

decimal.js是使用的二进制来计算的,所以可以更好地实现格化式数学运算,对数字进行高精度处理;使用decimal类型处理数据可以保证数据计算更为精确,还可以节省储存空间。

三、解决问题

精度问题(金钱失真问题):当 对数据进行浮点运算时候,可能会因为丢失精度而导致奇怪的结果,这时使用decimal可以很好的解决该问题。

四、使用

1、npm命令引入decimal.js文件

$ npm install --save decimal.js
/**  Node.js  */
var Decimal = require('decimal.js')
 
/** ES6 方式 */
import { Decimal } from 'decimal.js'

2.加减乘除

 const a = 9.99;
 const b = 8.03;
 
 // 加法
 let c = new Decimal(a).add(new Decimal(b)) 
 
 // 减法
 let d = new Decimal(a).sub(new Decimal(b))
 
 // 乘法
 let e = new Decimal(a).mul(new Decimal(b))
    
 // 除法
 let f = new Decimal(a).div(new Decimal(b))
methods: {
    handleDecimalData() {
        //加法
        var a1 = 0.13
        var b1 = 0.25
        let c1 = new Decimal(a1).add(new Decimal(b1)) 
        console.log("加法运算 a1 + b1 =",a1 + b1)
        console.log("使用decimal.js a1 + b1 =",c1.toNumber())
        //减法
        var a2 = 1.0
        var b2 = 0.99
        let c2 = new Decimal(a2).sub(new Decimal(b2)) 
        console.log("减法运算 a2 - b2 =",a2 - b2)
        console.log("使用decimal.js a2 - b2 =",c2.toNumber().toFixed(2))
        //乘法
        var a3 = 1.01
        var b3 = 1.02
        let c3 = new Decimal(a3).mul(new Decimal(b3)) 
        console.log("乘法运算 a3 * b3 = ", a3 * b3)
        console.log("使用decimal.js a3 * b3 = ",c3.toNumber())
        //除法
        var a4 = 0.033
        var b4 = 10
        let c4 = new Decimal(a4).div(new Decimal(b4)) 
        console.log("除法运算 a4 / b4 = ", a4 / b4)
        console.log("使用decimal.js a4 / b4 = ",c4.toNumber())
    }
}

注意:得到的是Decimal对象,需要转换为number类型哦

posted @ 2023-09-06 10:53  打个大大西瓜  阅读(755)  评论(0)    收藏  举报