基于 JavaScript 精度提升方案

精度提升进行,小数点保留

方案一:

扩大,再进行保留小数,如:

const num1 = 0.1;
const num2 = 0.3;
const sum = num1 + num2;// 精度可能会丢失
// 扩大的倍数取决去将要取得小数点的位数,最好化为整数计算,然后再进行降低倍率
const sum2 = (num1 * 1000 + num2 * 1000) / 1000;// 采取扩大倍数,精度得以保障,但会占用更多的内存空间
console.log(sum, sum2);
// 保留多少位小数再采用toFixed方法,n为正整数 sum.toFixed(n)

方案二:decimal.js

npm install --save decimal.js

实现代码,进行二次封装

创建 digitalComputation.ts 文件

import { Decimal } from 'decimal.js'
 
/*
 * @Author       : 贩卖夏日的0cc
 * @Version      : V1.0.0
 * @Date         : 2024-07-15 10:06:05
 * @Description  : 加法运算
 */
const decimalAdd = (...numbers: number[]): number => numbers.reduce((prev, curr) => new Decimal(prev).plus(curr).toNumber())
 
/*
 * @Author       : 贩卖夏日的0cc
 * @Version      : V1.0.0
 * @Date         : 2024-07-15 10:06:05
 * @Description  : 减法运算
 */
const decimalSubtract = (num1: number, num2: number): number => new Decimal(num1).minus(num2).toNumber()
 
/*
 * @Author       : 贩卖夏日的0cc
 * @Version      : V1.0.0
 * @Date         : 2024-07-15 10:06:05
 * @Description  : 乘法运算
 */
const decimalMultiply = (...numbers: number[]): number => numbers.reduce((prev, curr) => new Decimal(prev).times(curr).toNumber())
 
/*
 * @Author       : 贩卖夏日的0cc
 * @Version      : V1.0.0
 * @Date         : 2024-07-15 10:06:05
 * @Description  : 除法运算
 */
const decimalDivide = (num1: number, num2: number): number => new Decimal(num1).div(num2).toNumber()
 
/*
 * @Author       : 贩卖夏日的0cc
 * @Version      : V1.0.0
 * @Date         : 2024-07-15 10:06:05
 * @Description  : 四舍五入
 */
const decimalRound = (num: number, decimalPlaces: number): number => new Decimal(num).toDecimalPlaces(decimalPlaces).toNumber()
 
/*
 * @Author       : 贩卖夏日的0cc
 * @Version      : V1.0.0
 * @Date         : 2024-07-15 10:06:05
 * @Description  : 向上取整
 */
const decimalCeil = (num: number): number => new Decimal(num).ceil().toNumber()

export{
   decimalAdd,
   decimalSubtract,
   decimalMultiply,
   decimalDivide,
   decimalRound,
   decimalCeil
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值