更新记录
0.0.1(2025-10-11)
- 初始发布
- 提供高精度数值运算能力:加减乘除、整数除法、取模、幂运算、比较判断、有效数字控制、进制转换等
- 兼容 uniapp/uniappx(iOS、Web、Android、鸿蒙、小程序)
平台兼容性
uni-app(4.75)
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | 5.0 | √ | √ |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
uni-app x(4.76)
Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
---|---|---|---|---|---|
√ | √ | 5.0 | √ | √ | √ |
lime-bignumber 大数运算
一个UTS版的大数与高精度小数计算库,支持任意精度加减乘除、取整、比较、格式化、进制转换、有效位控制等,兼容uniapp/uniappx(iOS、Web、Android、鸿蒙、小程序)。
功能概述
本模块提供以下高精度数值能力:
- 任意精度运算:加、减、乘、除、取模、幂运算
- 比较判断:等于、大于/小于、区间判断、是否整数/有限/NaN/正/负/零
- 有效数字与舍入:支持9种舍入模式、保留小数位、有效数字位(sd/precision)
- 进制与字符串转换:十进制、其他进制(2-36)、科学计数法、定点表示法
- 实用函数:绝对值、取反、取整、平方根、移动小数点(shiftedBy)、整数除法(idiv)
文档链接
📚 组件详细文档请访问以下站点:
安装方法
- 在uni-app插件市场中搜索并导入
lime-bignumber
- 非源码APP需要自定义基座
- 请先在页面上引入插件后再自定义基座
使用方法
// 推荐:从模块中获取 BigNumber 类
import { BigNumber } from '@/uni_modules/lime-bignumber'
// 创建实例
const x = new BigNumber('123.456')
const y = new BigNumber(10)
使用示例
基本运算
const a = new BigNumber('0.1')
const b = new BigNumber('0.2')
// 加法
a.plus(b).toString() // '0.3'
// 减法
b.minus(a).toString() // '0.1'
// 乘法
b.multipliedBy(3).toString() // '0.6'
b.times(3).toString() // '0.6' 等价
// 除法
new BigNumber(1).dividedBy(3).toString() // '0.33333333333333333333'(默认20位小数)
new BigNumber(1).div(3).toString() // 等价
整数除法与取模
const m = new BigNumber(5)
const n = new BigNumber(3)
// 整数除法(只保留整数部分)
m.dividedToIntegerBy(n).toString() // '1'
m.idiv(n).toString() // '1'
// 取模
m.modulo(n).toString() // '2'
m.mod(n).toString() // '2'
幂运算
new BigNumber(2).pow(10).toString() // '1024'
new BigNumber('9').exponentiatedBy(0.5).toString() // '3'(配合精度与舍入)
比较判断
const v = new BigNumber('100.00')
v.isEqualTo('100') // true
v.eq('100') // true
v.isGreaterThan(99) // true
v.gt(99) // true
v.isGreaterThanOrEqualTo('100') // true
v.gte('100') // true
v.isLessThan(200) // true
v.lt(200) // true
v.isLessThanOrEqualTo('100') // true
v.lte('100') // true
// 三值比较(1:大于,-1:小于,0:相等,null:无法比较)
v.comparedTo('100') // 0
转换与输出
const num = new BigNumber('255')
// 进制字符串
num.toString(16) // 'ff'
num.toString(2) // '11111111'
// 数值/JSON/原始值
num.toNumber() // 255
num.toJSON() // '"255"'
num.valueOf() // '255'
// 科学计数法(示例,实际以库支持为准)
new BigNumber('12345.6').toString() // 默认不强制科学计数法
有效数字与舍入
const s = new BigNumber('9876.54321')
// 保留小数位(decimalPlaces / dp)
s.decimalPlaces(2).toString() // '9876.54'
s.dp(4).toString() // '9876.5432'
// 有效位数统计与控制
s.sd() // 9(默认不计尾随零)
s.sd(true) // 9(包含整数部分尾随零时的统计)
s.sd(6).toString() // '9876.54'(四舍五入到6位有效数字)
s.sd(6, 0 /* ROUND_UP */).toString() // '9876.55'
// precision 等价能力(与sd保持一致)
s.precision() // 9
s.precision(5).toString() // '9876.5'
小数点移动与平方根
new BigNumber('1.23').shiftedBy(3).toString() // '1230'
new BigNumber('1.23').shiftedBy(-3).toString() // '0.00123'
new BigNumber(16).sqrt().toString() // '4'
new BigNumber(3).sqrt().toString() // '1.73205080756887729353'(示例值随精度配置变化)
API 概览
下表列出主要 API(每行一个函数,详见接口文件 uni_modules/lime-bignumber/utssdk/interface.uts):
函数中文名称 | 函数名 | 说明 |
---|---|---|
构造函数 | new BigNumber(value, base?) | 创建实例;value可为字符串、数值、bigint、BigNumber;base为进制(2-36) |
加法 | plus(n) | 参数n:字符串/数值/bigint/BigNumber;返回新值 |
减法 | minus(n) | 参数n:字符串/数值/bigint/BigNumber;返回新值 |
乘法 | multipliedBy(n) | 参数n:字符串/数值/bigint/BigNumber;返回新值 |
乘法(别名) | times(n) | 同 multipliedBy(n) |
除法 | dividedBy(n) | 参数n:字符串/数值/bigint/BigNumber;按配置保留小数 |
除法(别名) | div(n) | 同 dividedBy(n) |
整数除法 | dividedToIntegerBy(n) | 只保留整数部分(floor除法) |
整数除法(别名) | idiv(n) | 同 dividedToIntegerBy(n) |
取模 | modulo(n) | 返回余数;受 MODULO_MODE 影响 |
取模(别名) | mod(n) | 同 modulo(n) |
幂运算 | exponentiatedBy(n, m?) | 指数n;可选模数m |
幂运算(别名) | pow(n, m?) | 同 exponentiatedBy(n, m?) |
等于判断 | isEqualTo(n) | 返回boolean |
等于判断(别名) | eq(n) | 返回boolean |
大于判断 | isGreaterThan(n) | 返回boolean |
大于判断(别名) | gt(n) | 返回boolean |
大于等于 | isGreaterThanOrEqualTo(n) | 返回boolean |
大于等于(别名) | gte(n) | 返回boolean |
小于判断 | isLessThan(n) | 返回boolean |
小于判断(别名) | lt(n) | 返回boolean |
小于等于 | isLessThanOrEqualTo(n) | 返回boolean |
小于等于(别名) | lte(n) | 返回boolean |
三值比较 | comparedTo(n) | 返回1/-1/0/null |
转字符串 | toString(base?) | 支持2-36进制;返回字符串 |
转数字 | toNumber() | 转原生number(可能丢失精度) |
转JSON | toJSON() | 返回JSON字符串 |
原始值 | valueOf() | 返回字符串表示值 |
绝对值 | absoluteValue() | 返回新值 |
绝对值(别名) | abs() | 同 absoluteValue() |
取反 | negated() | 返回新值(-x) |
取整 | integerValue(rm?) | 可选舍入模式;返回新值 |
保留小数位 | decimalPlaces(dp, rm?) | 设置小数位;返回新值 |
保留小数位(别名) | dp(dp, rm?) | 同 decimalPlaces(dp, rm?) |
有效位统计 | sd(includeZeros?) | 返回有效位数或null |
保留有效数字 | sd(significantDigits, rm?) | 返回新值(按有效数字舍入) |
有效位统计 | precision(includeZeros?) | 返回有效位数或null |
保留有效数字 | precision(significantDigits, rm?) | 返回新值(按有效数字舍入) |
小数点移动 | shiftedBy(n) | 小数点移动n位;返回新值 |
平方根 | sqrt() | 返回平方根;按 DECIMAL_PLACES/ROUNDING_MODE 舍入 |
有限判断 | isFinite() | 返回boolean |
整数判断 | isInteger() | 返回boolean |
NaN判断 | isNaN() | 返回boolean |
负数判断 | isNegative() | 返回boolean |
正数判断 | isPositive() | 返回boolean |
零判断 | isZero() | 返回boolean |
本地化格式化(未实现) | toFormat(decimalPlaces?, roundingMode?, format?) | 千分位/分组/分隔符;返回字符串 |
完整方法、参数与行为说明请参考接口定义文件中的注释与示例。
配置项与模式
支持的配置项(未实现):
- DECIMAL_PLACES:最大小数位数(默认20)
- ROUNDING_MODE:舍入模式(0-8,默认4-ROUND_HALF_UP)
- EXPONENTIAL_AT:指数显示阈值
- RANGE:数值范围限制
- CRYPTO:是否使用加密安全随机数生成器
- MODULO_MODE:模运算模式(0,1,3,6,9)
- POW_PRECISION:幂运算精度
- FORMAT:格式化选项(千分位、分隔符、分组大小、前后缀等)
- ALPHABET:自定义进制字符表(用于toString(base))
舍入模式(0-8)常见含义:
- 0 ROUND_UP:向上舍入
- 1 ROUND_DOWN:向下舍入
- 2 ROUND_CEIL:向正无穷舍入
- 3 ROUND_FLOOR:向负无穷舍入
- 4 ROUND_HALF_UP:四舍五入(远离零)
- 5 ROUND_HALF_DOWN:五舍六入(靠近零)
- 6 ROUND_HALF_EVEN:银行家舍入
- 7 ROUND_HALF_CEIL:等距时向正无穷
- 8 ROUND_HALF_FLOOR:等距时向负无穷
模运算模式(0/1/3/6/9):
- 1 ROUND_DOWN(常用)
- 9 EUCLID(欧几里得除法,未实现)
进制与格式化
- 进制转换:toString(base) 支持 2-36,字母表可通过 ALPHABET 配置
- 格式化输出:可通过 FORMAT 指定分组与分隔符,toFormat(...)(未实现)生成本地化字符串
常见问题
- iOS普通授权下无法使用,需要源码版才行
- 鸿蒙Next普通授权下无法使用,需要源码版才行
- 非源码APP需要自定义基座并确保插件已在页面中引用
- 对于极大/极小数与复杂格式化,请结合 DECIMAL_PLACES、ROUNDING_MODE 与 FORMAT 配置
支持与赞赏
如果你觉得本插件解决了你的问题,可以考虑支持作者: | 支付宝赞助 | 微信赞助 |
---|---|---|
![]() |
![]() |