精度提升进行,小数点保留
方案一:
扩大,再进行保留小数,如:
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
}