欢迎加入开源鸿蒙PC社区: https://harmonypc.csdn.net/
欢迎在PC社区平台申请新建项目:https://atomgit.com/OpenHarmonyPCDeveloper
AtomGit 仓库地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_node_vue_ts


  1. 环境搭建:

该文完整梳理了ARM64架构鸿蒙PC(HarmonyOS/OpenHarmony6.1及以上),基于CodeArts IDE搭建Vite+Vue前端项目的全流程与疑难解决方案。项目实操中,Vite启动会出现rolldown原生模块权限拒绝报错,根源是鸿蒙系统拦截未签名二进制文件,最终解决方案为引入ohos-signpost自动签名工具,配置npm后置钩子,在依赖安装完成后自动为所有.node文件添加系统合法签名,消除权限校验拦截,最终实现CodeArts IDE内Vue+TS项目正常启动、调试。

可以参考文章:
OpenHarmony 鸿蒙 PC + CodeArts IDE 前端 Vite+Vue 完整开发环境搭建指南:https://blog.csdn.net/wanmeijuhao/article/details/161925265


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))
六、关键注意事项
  1. 优先传字符串
    小数直接传数字仍有微小失真,接口返回金额建议用字符串传入:
    // 推荐
    new Big('0.1')
    // 不推荐
    new Big(0.1)
    
  2. 运算后必须 toString / toFixed
    Big 实例不能直接渲染数字,模板里要转字符串展示。
  3. 全局精度配置
import Big from 'big.js'
Big.DP = 10 // 默认除法保留10位小数
Big.RM = Big.roundHalfUp // 四舍五入
  1. 不支持超大整数(雪花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高精度运算库完整使用说明
  1. 核心作用:轻量无依赖,解决JS原生浮点数计算精度丢失问题,专门适配电商、金融金额计算;相比bignumber.js更小巧简洁。
  2. 基础用法:安装后通过实例方法plus/minus/times/div完成加减乘除,搭配toFixed保留指定小数位用于金额展示。
  3. Vue3两种使用方案
  • 局部导入:组件直接引入Big实例运算;
  • 全局挂载:在main.js绑定全局$Big,组件通过实例代理调用;
  • 工程规范:封装utils/money.js统一导出加减乘除、金额格式化工具函数,全项目复用。
  1. 开发注意事项
    金额优先以字符串传入Big避免精度损耗;Big对象不能直接渲染,需转为字符串;可全局配置默认小数位数与四舍五入规则;仅适合小数计算,超长唯一ID使用原生BigInt。
  2. 库对比:big.js轻量化、专注金额;bignumber.js功能全面但体积更大。
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐