更新记录

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)

文档链接

📚 组件详细文档请访问以下站点:

安装方法

  1. 在uni-app插件市场中搜索并导入lime-bignumber
  2. 非源码APP需要自定义基座
  3. 请先在页面上引入插件后再自定义基座

使用方法

// 推荐:从模块中获取 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(...)(未实现)生成本地化字符串

常见问题

  1. iOS普通授权下无法使用,需要源码版才行
  2. 鸿蒙Next普通授权下无法使用,需要源码版才行
  3. 非源码APP需要自定义基座并确保插件已在页面中引用
  4. 对于极大/极小数与复杂格式化,请结合 DECIMAL_PLACES、ROUNDING_MODE 与 FORMAT 配置

支持与赞赏

如果你觉得本插件解决了你的问题,可以考虑支持作者: 支付宝赞助 微信赞助

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。