OpenHarmony 鸿蒙 PC + CodeArts IDE + Node.js安装第三方big.js库进行数据高精度运算
欢迎加入开源鸿蒙PC社区: https://harmonypc.csdn.net/
欢迎在PC社区平台申请新建项目:https://atomgit.com/OpenHarmonyPCDeveloper
AtomGit 仓库地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_node_vue_ts
- 环境搭建:
该文完整梳理了ARM64架构鸿蒙PC(HarmonyOS/OpenHarmony6.1及以上),基于CodeArts IDE搭建Vite+Vue前端项目的全流程与疑难解决方案。项目实操中,Vite启动会出现rolldown原生模块权限拒绝报错,根源是鸿蒙系统拦截未签名二进制文件,最终解决方案为引入ohos-signpost自动签名工具,配置npm后置钩子,在依赖安装完成后自动为所有.node文件添加系统合法签名,消除权限校验拦截,最终实现CodeArts IDE内Vue+TS项目正常启动、调试。
big.js介绍
一、big.js是什么
big.js 是 npm 上轻量级高精度十进制运算库,专门解决 JS 原生浮点数精度丢失问题(0.1+0.2=0.30000000000000004)。
- 压缩仅 6KB,无任何依赖
- 只专注小数金额计算,API 极简,电商/金融首选
- 区别:
bignumber.js/decimal.js功能更重、支持更多进制,big.js 主打轻量简单
二、解决什么痛点
JS 数字是 IEEE754 二进制浮点,小数运算天生失真:
console.log(0.1 + 0.2) // 0.30000000000000004
console.log(19.9 * 100) // 1989.9999999999998
做商品价格、订单结算、分账、利息计算时绝对不能用原生运算,必须用 big.js。
三、安装
npm install big.js

四、核心运算 API
实例方法(不可直接用 + - * /,要用内置函数)
| 运算 | 方法 |
|---|---|
| 加法 | .plus(n) |
| 减法 | .minus(n) |
| 乘法 | .times(n) |
| 除法 | .div(n) |
| 保留小数 | .dp(位数) |
| 转字符串 | .toString() / .toFixed(2) |
| 比较相等 | .eq(n) |
| 大于 | .gt(n) |
五、Vue3 完整示例(script setup)
1. 组件直接使用
<template>
<div>
<p>0.1 + 0.2 = {{ res }}</p>
<p>单价:{{ price }} 数量{{ num }} 总价:{{ total }}</p>
</div>
</template>
<script setup>
import { ref } from 'vue'
import Big from 'big.js'
// 基础运算
const res = new Big(0.1).plus(0.2).toString()
const price = ref('19.99')
const num = ref(3)
// 修复dp报错,使用toFixed保留2位金额小数
const total = new Big(price.value).times(num.value).toFixed(2)
</script>
配套修改金额工具 utils/money.js
import Big from 'big.js'
// 加法
export function add(a, b) {
return new Big(a).plus(b).toString()
}
// 减法
export function sub(a, b) {
return new Big(a).minus(b).toString()
}
// 乘法
export function mul(a, b) {
return new Big(a).times(b).toString()
}
// 除法
export function div(a, b) {
return new Big(a).div(b).toString()
}
// 格式化金额,保留2位小数(替换dp)
export function formatMoney(val) {
return new Big(val).toFixed(2)
}

2. 全局挂载(所有组件直接用 $Big)
main.js
import { createApp } from 'vue'
import App from './App.vue'
import Big from 'big.js'
const app = createApp(App)
app.config.globalProperties.$Big = Big
app.mount('#app')
组件中:
const { proxy } = getCurrentInstance()
const sum = proxy.$Big(0.1).plus(0.2).toString()

3. 封装金额工具(项目最佳实践)
新建 src/utils/money.js
import Big from 'big.js'
// 加法
export function add(a, b) {
return new Big(a).plus(b).toString()
}
// 减法
export function sub(a, b) {
return new Big(a).minus(b).toString()
}
// 乘法
export function mul(a, b) {
return new Big(a).times(b).toString()
}
// 除法
export function div(a, b) {
return new Big(a).div(b).toString()
}
// 格式化金额,保留2位小数
export function formatMoney(val) {
return new Big(val).toFixed(2)
}
组件调用:
import { mul, formatMoney } from '@/utils/money'
const total = formatMoney(mul(29.9, 5))
六、关键注意事项
- 优先传字符串
小数直接传数字仍有微小失真,接口返回金额建议用字符串传入:// 推荐 new Big('0.1') // 不推荐 new Big(0.1) - 运算后必须 toString / toFixed
Big 实例不能直接渲染数字,模板里要转字符串展示。 - 全局精度配置
import Big from 'big.js'
Big.DP = 10 // 默认除法保留10位小数
Big.RM = Big.roundHalfUp // 四舍五入
- 不支持超大整数(雪花ID、长ID用原生 BigInt)
big.js 侧重小数金额,超长整数 ID 用 ES 原生123n或 bn.js。
七、和 bignumber.js 简单对比
- big.js:体积小、API少、只做十进制小数,电商/收银首选
- bignumber.js:功能多,支持进制转换、更多数学函数,体积更大
总结
适配ARM64架构OpenHarmony6.1及以上设备开发教程:在CodeArts IDE搭建Vite+Vue+TS工程时,rolldown生成的.node原生模块会因系统未签名触发权限报错;解决方案为引入ohos-signpost自动签名工具,配置npm后置钩子自动签名二进制文件,即可正常启动、调试项目,附带完整搭建教程链接。
big.js高精度运算库完整使用说明
- 核心作用:轻量无依赖,解决JS原生浮点数计算精度丢失问题,专门适配电商、金融金额计算;相比bignumber.js更小巧简洁。
- 基础用法:安装后通过实例方法plus/minus/times/div完成加减乘除,搭配toFixed保留指定小数位用于金额展示。
- Vue3两种使用方案
- 局部导入:组件直接引入Big实例运算;
- 全局挂载:在main.js绑定全局$Big,组件通过实例代理调用;
- 工程规范:封装utils/money.js统一导出加减乘除、金额格式化工具函数,全项目复用。
- 开发注意事项
金额优先以字符串传入Big避免精度损耗;Big对象不能直接渲染,需转为字符串;可全局配置默认小数位数与四舍五入规则;仅适合小数计算,超长唯一ID使用原生BigInt。 - 库对比:big.js轻量化、专注金额;bignumber.js功能全面但体积更大。
更多推荐



所有评论(0)