微信小程序Decimal实现高精度数值计算

记录微信小程序使用Decimal实现高精度数值计算的一些过程。

实现背景:

一些需要支付的项目,可以使用一些优惠券(优惠券包含代金券和折扣券),那么多个项目,每个项目又可使用多张优惠券。最后需要计算最终金额来进行支付。因为涉及到用户的支付,所以需要格外的注意,避免用户支付错误的金额,那么就是大问题了。

问题:

此时就是有一个问题,之前的使用优惠券后的价格是后端进行计算的,前端通过调接口获得。本期的话可使用多张优惠券,又有叠加使用,互斥逻辑等,用户频繁切换的话,再调取接口进行计算金额,感受上就是不太好。先不说用户频繁切换导致接口的获取不及时,然后也会有一些性能消耗问题。所以感觉最佳的实现就是通过前端来实现,前端自己来进行金额的计算。但是前端计算老是有一些精度的问题,之前就是出现过前后端计算金额不一致的问题。这是因为在JavaScript中采用的是双精度浮点数格式(64位),而在这种格式下无法精确表示某些小数。这时候后端给出了一个建议,使用decimal库,说是计算比较好。

安装步骤:

说干就干,找到github地址来进行看看(github.com/MikeMcl/dec...

按照步骤一步步来实现:

javascript 复制代码
// 安装
npm install decimal.js

// 使用
const Decimal = require('decimal.js');

import Decimal from 'decimal.js';

import {Decimal} from 'decimal.js';

按照这个步骤来进行使用了,但是运行过程中一直报错,提示找不到decimal.js, 提示 npm install decimal.js 来进行安装

但是明明Package中已经安装好了,不知道为什么会一直报找不到。也换过安装方式 使用yarn, 也通过 -g 来全局安装但是此时提示证书过期?

不知道是不是因为是微信小程序的原因,但是看网上别人是可以正常使用的,难道是node版本的问题?

好吧,折腾不了,那就直接引入吧。

直接找到文件的decimal.js 文件,把内容复制到自己项目的utils/decimal文件下,

此时再引入 终于可以正常使用了!

javascript 复制代码
import Decimal from 'utils/decimal'
scss 复制代码
Decimal.add(...) // 直接使用就可

具体使用:

这里写上一些常用的方法吧,其实大部分用到的也就是乘除和加减。

mul:乘法

scss 复制代码
Decimal.mul(0.1, 0.2).toNumber() // 0.02

toNumber是转换为数值类型,默认计算后是字符串类型

add: 加法

scss 复制代码
Decimal.add(0.1, 0.2).toNumber() // 0.3

sub: 减法

scss 复制代码
Decimal.sub(0.8, 0.2).toNumber() // 0.6
makefile 复制代码
toFixed: 转换为几位小数
scss 复制代码
Decimal.sub(0.8, 0.2).toFixed(3) // '0.600'

其他的方法我就不一一列举了,都可在该文档中进行查询(mikemcl.github.io/decimal.js/...

就写到这里了,后续有问题再进行补充,如果有什么问题,欢迎指正!!

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋2 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁2 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95272 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大2 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师2 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学2 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端