Js小数运算精度缺失的解决方法

项目场景:

提示:项目需求截图:


问题描述

众所周知Js做运算时0.1+0.2不等于0.3,目前项目需要计算关于金额的选项,涉及到金额保留后两位。保单欠款是根据用户输入的保单应收和保单欠款自动计算的。


原因分析:

产生浮点数计算精度不准确的原因:

在计算机角度,计算机算的是二进制,而不是十进制。二进制后变成了无线不循环的数,而计算机可支持浮点数的小数部分可支持到52位,所有两者相加,在转换成十进制,得到的数就不准确了,加减乘除运算原理一样。
提示:js小数计算精度缺失是历史遗留问题,被人诟病很多,不过也有办法解决,js小数计算会缺失精度,但正数不会有这个问题,所以计算时把小数扩大相应倍数,让它变成整数计算,最后结果再除以相应倍数,就得到了想要的结果。

不过我这边使用的是mathjs第三方库。下面是mathjs的解决办法


解决方案:

提示:mathjs解决方案:

官网:https://mathjs.org/index.html

安装

javascript 复制代码
npm install mathjs

引入

javascript 复制代码
import * as math from 'mathjs'

封装成方法

javascript 复制代码
import * as math from 'mathjs';
//例如:num1-num2,在需要的地方直接调用subtract 传二个参数(num1,num2)
    // 加
	add(num1,num2){
		return math.add(math.bignumber(num1),math.bignumber(num2));
	},
	// 减
	subtract(num1,num2){
		return math.subtract(math.bignumber(num1),math.bignumber(num2));
	},
	// 乘
	multiply(num1,num2){
		return math.multiply(math.bignumber(num1),math.bignumber(num2));
	},
	// 除
	divide(num1,num2){
		return math.divide(math.bignumber(num1),math.bignumber(num2));
}
相关推荐
薛定猫AI2 小时前
【深度解析】Gemma Chat 本地 AI 编程 Agent:Electron + MLX + 开源模型的离线 Vibe Coding 实战
javascript·人工智能·electron
全栈前端老曹2 小时前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09
笑虾2 小时前
Win10 修改注册表 让鼠标悬停PNG上时 tip 始终显示分辨率
开发语言·javascript·ecmascript
雾岛听风6913 小时前
JavaScript基础语法速查手册
开发语言·前端·javascript
用户2367829801683 小时前
从零实现 GIF 制作工具:LZW 压缩与 Median Cut 色彩量化
前端·javascript
棉猴3 小时前
Python海龟绘图之绘制文本
javascript·python·html·write·turtle·海龟绘图·输出文本
Highcharts.js4 小时前
线形比赛积分增长或竞赛图|Highcharts企业图表代码示列
开发语言·前端·javascript·折线图·highcharts·竞赛图
让学习成为一种生活方式4 小时前
大肠杆菌合成扑热息痛--对乙酰氨基酚--文献精读227
开发语言·前端·javascript
多秋浮沉度华年4 小时前
electron 初始使用记录
javascript·arcgis·electron
竹林8185 小时前
用 wagmi v2 + WebSocket 硬磕 NFT 上架失败:一个前端开发者踩过的实时状态同步坑
javascript·next.js