更新记录
1.0.3(2026-08-28) 下载此版本
修复部分计算后还是精度丢失的问题
1.0.2(2022-10-21) 下载此版本
numDiv(187.2, 100) 修复bug
1.0.1(2022-01-24) 下载此版本
修复部分数字运算bug
查看更多平台兼容性
uni-app(5.24)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | - | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | - | - | - | √ | - | - | √ | √ |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
nl-precisionNum 前端数字精度计算
nl-precisionNum 是一个无第三方依赖的轻量级十进制计算工具,用于减少 JavaScript 浮点数加、减、乘、除时出现的精度误差。
功能特点
- 提供加法、减法、乘法和除法。
- 支持
number和数字字符串。 - 支持
1e-7等科学计数法。 - 支持负数。
- 空字符串、
null和undefined按照0处理。 - 不采集数据,不申请权限,不访问网络。
- 支持 Vue 2、Vue 3、App、H5 和主流小程序。
安装
将插件安装到项目的 uni_modules/nl-precisionNum 目录即可,无需在 main.js 中注册。
引入
import {
numAdd,
numSub,
numMulti,
numDiv
} from '@/uni_modules/nl-precisionNum/js_sdk/nl-precisionNum.js'
基础示例
numAdd(0.1, 0.2) // 0.3
numSub(1, 0.9) // 0.1
numMulti(0.7, 1.05) // 0.735
numDiv(187.2, 100) // 1.872
数字字符串
接口或输入框返回数字字符串时可以直接参与计算:
numAdd('100.10', '0.20') // 100.3
numMulti('12.5', '2') // 25
科学计数法
numAdd(1e-7, 2e-7) // 3e-7
numMulti(1e-7, 3) // 3e-7
连续汇总
const amounts = [0.1, 0.2, 10.35]
const total = amounts.reduce((sum, amount) => {
return numAdd(sum, amount)
}, 0)
console.log(total) // 10.65
API
numAdd(a, b)
计算 a + b。
numAdd(12.30, 0.15) // 12.45
numSub(a, b)
计算 a - b。
numSub(12.30, 0.15) // 12.15
numMulti(a, b)
计算 a * b。
numMulti(12.30, 0.15) // 1.845
numDiv(a, b)
计算 a / b。
numDiv(187.2, 100) // 1.872
除数为 0 时保持 JavaScript 的原生结果:
numDiv(1, 0) // Infinity
numDiv(0, 0) // NaN
入参处理
| 入参 | 处理结果 |
|---|---|
| 有限数字 | 正常参与计算 |
| 数字字符串 | 转换为数字后参与计算 |
| 空字符串 | 按 0 处理 |
null |
按 0 处理 |
undefined |
按 0 处理 |
| 非数字字符串 | 返回 NaN |
Infinity |
返回 NaN |
金额显示
本插件负责计算,不会强制保留两位小数。金额展示时可以在计算完成后格式化:
const amount = numAdd(10.1, 20.2)
const displayAmount = amount.toFixed(2)
console.log(displayAmount) // 30.30
不要在每一步计算前调用 toFixed,因为 toFixed 返回字符串。建议完成全部计算后,仅在界面展示阶段格式化。
从原工具文件迁移
原来的引入方式:
import { numAdd } from '@/utils/precisionNum.js'
修改为:
import { numAdd } from '@/uni_modules/nl-precisionNum/js_sdk/nl-precisionNum.js'
四个方法的名称和返回类型保持不变,其余业务代码无需调整。
精度边界
插件返回值类型仍然是 JavaScript Number。当整数或中间计算值超过 9007199254740991 时,JavaScript 本身无法保证整数绝对精确,插件会降级使用原生计算并清理常见的浮点尾数。
对于超大金额或要求任意位数绝对精确的业务,建议后端以字符串或最小货币单位保存,并使用专门的大数十进制方案。
发布到插件市场
在 HBuilderX 中右键点击 uni_modules/nl-precisionNum 目录,选择发布到插件市场。
当前插件 ID 为 nl-precisionNum。如果后续调整插件 ID,需要同步修改以下内容:
- 插件目录名称。
package.json中的id。js_sdk/nl-precisionNum.js文件名。- 文档和项目中的导入路径。
隐私与权限
- 插件不采集、存储或上传任何数据。
- 插件不申请系统权限。
- 插件不包含广告。
- 插件不依赖 uniCloud、图床或远程服务。

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 346
赞赏 0
下载 12561828
赞赏 1948
赞赏
京公网安备:11010802035340号