Number Precision Library
解决 JavaScript 数字精度问题的相关函数
基础使用
typescript
import { plus, minus, times, divide, round } from '@mgcloud/lib-utils'
// 加法
plus(0.1, 0.2) // => 0.3
plus(2.3, 2.4) // => 4.7
// 减法
minus(1.0, 0.9) // => 0.1
minus(0.3, 0.2) // => 0.1
// 乘法
times(3, 0.3) // => 0.9
times(0.362, 100) // => 36.2
// 除法
divide(1.21, 1.1) // => 1.1
divide(0.9, 3) // => 0.3
// 四舍五入
round(0.105, 2) // => 0.11
round(1.335, 2) // => 1.34链式操作
typescript
import { createCalculator } from '@mgcloud/lib-utils'
// 创建计算器实例进行链式操作
const result = createCalculator(1.23456)
.round(2) // 1.23
.plus(0.1) // 1.33
.minus(0.2) // 1.13
.times(2) // 2.26
.divide(0.3) // 7.53333333333333
.round(2) // 7.53
.valueOf()typescript
// 也可以直接使用 NumberCalculator 类
import { NumberCalculator } from '@mgcloud/lib-utils'
const calc = new NumberCalculator(1.2345)
.round(2) // 1.23
.plus(0.1) // 1.33
.valueOf()API 文档
基础运算函数
plus(...numbers: NumberType[]): number
执行精确加法运算。
typescript
plus(0.1, 0.2) // => 0.3
plus(0.1, 0.2, 0.3) // => 0.6
plus(-1.6, -1) // => -2.6minus(...numbers: NumberType[]): number
执行精确减法运算。
typescript
minus(1.0, 0.9) // => 0.1
minus(1, 0, 2, 3) // => -4
minus(8893568.397103781249, -7.29674059550) // => 8893575.693844376749times(...numbers: NumberType[]): number
执行精确乘法运算。
typescript
times(0.7, 0.1) // => 0.07
times(3, 0.3) // => 0.9
times(0.362, 100) // => 36.2divide(...numbers: NumberType[]): number
执行精确除法运算。
typescript
divide(1.21, 1.1) // => 1.1
divide(0.9, 3) // => 0.3
divide(36.2, 0.362) // => 100round(num: NumberType, decimal: number): number
对数字进行指定小数位的四舍五入。
typescript
round(0.105, 2) // => 0.11
round(1.335, 2) // => 1.34
round(12345.105, 2) // => 12345.11工具函数
strip(num: NumberType, precision = 15): number
修正数字精度。
typescript
strip(0.09999999999999998) // => 0.1
strip(1.0000000000000001) // => 1digitLength(num: NumberType): number
获取数字的小数位数。
typescript
digitLength(123.4567890123) // => 10
digitLength(1.23e-5) // => 7enableBoundaryChecking(flag = true): void
启用/禁用边界检查。
typescript
enableBoundaryChecking(false) // 禁用边界检查
enableBoundaryChecking() // 启用边界检查链式操作
createCalculator(value: NumberType): NumberCalculator
创建一个计算器实例,支持链式操作。
typescript
const calc = createCalculator(10)
.plus(0.1) // 10.1
.minus(0.2) // 9.9
.times(2) // 19.8
.divide(0.3) // 66
.round(2) // 66.00
.valueOf()类型定义
typescript
type NumberType = number | string // 支持数字或数字字符串注意事项
- 所有计算都是不可变的,不会修改原始数据
- 支持科学记数法的数字字符串 (如: '1.23e-4')
- 默认开启边界检查,对超过 JavaScript 安全数字的运算会发出警告
- 链式操作返回的计算器实例可以重复使用
兼容性
- 支持所有现代浏览器
- 支持 Node.js
- 支持 TypeScript
错误处理
- 所有计算函数都会对输入进行基本验证
- 在可能导致精度丢失的情况下会通过控制台发出警告
- 除数为 0 时会返回 Infinity
示例
typescript
// 常见的浮点数问题
0.1 + 0.2 // => 0.30000000000000004
plus(0.1, 0.2) // => 0.3
// 链式复杂计算
createCalculator(1.23456)
.round(2) // 1.23
.plus(0.1) // 1.33
.minus(0.2) // 1.13
.times(2) // 2.26
.divide(0.3) // 7.53333333333333
.valueOf()
// 大量数字的累加
plus(...new Array(500).fill(1)) // => 500导出方法
typescript
import {
strip,
plus,
minus,
times,
divide,
round,
digitLength,
float2Fixed,
enableBoundaryChecking,
NumberCalculator,
createCalculator,
} from '@mgcloud/lib-utils'