js 金额计算时数值溢出

news/2024/10/6 18:30:40

js 计算乘算时数字溢出

  • 场景项目上为了计算税率相乘,金额有小数点乘以税率后会导致部分数字溢出,为了解决数字溢出。

  • 使用 bignumber.js 库:

  • 安装 npm run install bignumber.js

  • 使用:

  • 效果图

    // 引入BigNumberconst BigNumber = require("bignumber.js");created() {console.log("直接相乘有数字溢出问题115.75 * 0.06=" + 115.75 * 0.06);console.log("115.75 * 0.06=" + this.getCommonNum(115.75, 0.06));console.log("620.75 * 0.06=" + this.getCommonNum(620.75, 0.06));console.log("4455.45 * 0.01=" + this.getCommonNum(4455.45, 0.01));}/*** value 金额* ratio 税率* 金额税率计算如果是整数取整,小数点小于两位保留当前数字,小数点大于3为,取第三位如果大于5需要往前面一维进一,小于5保留小数点后两位即可*/getCommonNum(value, ratio) {// vue js计算乘算时数字溢出// 使用BigNumberconst largeNumber1 = new BigNumber(value);const largeNumber2 = new BigNumber(ratio);const result = largeNumber1.times(largeNumber2);const num = Number(result.toString());const numStr = result ? result.toString() : 0;// 判断是否是整数if (Number.isInteger(num)) {return num;} else {if (numStr.includes(".")) {const numLen = numStr.split(".")[1].length;if (numLen <= 2) {return num;} else if (numLen >= 3) {const first = numStr.split(".")[0];const second = numStr.split(".")[1];const twoNum = Number(second.slice(0, 2));const threeNum = Number(second.slice(2, 3));if (threeNum < 5) {const conversion = first + "." + twoNum;return Number(conversion);} else {const num1 = first + "." + twoNum;const num12 = Number(num1) + 0.01;return Number(num12);}} else {return num;}}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Go-Zero技能提升:深度探究goctl的妙用,轻松应对微服务开发挑战!(三)

深入解析Go-Zero的goctl工具,从0到1学会使用,快速生成api服务、rpc服务脚手架,提高开发效率!前言 有位同学在群里说:“Go-Zero官方文档太简洁了,对小白有点不友好。好奇你们是怎么学习的?项目是怎么封装的?有什么提高开发效率的技巧吗?”。 来来来,这期内容给你安排上…

openGauss 冲突处理

冲突处理 逻辑复制的行为类似于正常的DML操作,即便数据在订阅者节点本地被修改,逻辑复制也会根据收到的更改来更新数据。如果流入的数据违背了任何约束,复制将停止。这种情况被称为一个冲突。在复制UPDATE或DELETE操作时,缺失的数据将不会产生冲突并且这类操作将被简单地跳…

如何完美解决Outlook大文件传送问题,提升办公协作效率?

在日常工作中,邮件是一种常用的通信方式,经常用来发送各类文件,比如报告和文档、合同和协议、财务报表、营销资料、设计文件等。但有时文件会比较大,因此Outlook大文件传送时,会遇到附件大小受限的情况。常用的解决发送大文件的问题有以下几种: 1.压缩文件:如果文件大小…

记一次java进程频繁挂掉问题排查修复

前言 最近业务部门有个java服务进程会突然无缘无故的挂掉,然后这个服务会产生一堆类似hs_err_pid19287.log这样的日志。业务部门负责人就把hs_err_pidxxx的日志发给我,让我帮忙看下问题。本文就来回顾一下,我是如何帮业务部门进行问题排查 排查历程 首先hs_err_pidxxx的日志…

BigDecimal精度理解

BigDecimal的类声明以及几个属性:接下来我们可以debug来看下其运行原理BigDecimal bigDecimal1 = BigDecimal.valueOf(2.88);BigDecimal bigDecimal2 = BigDecimal.valueOf(3.5);BigDecimal resDecimal = bigDecimal1.add(bigDecimal2);System.out.println(resDecimal); 可以看…

linux使用blkid未显示所有设备的UUID

如题: 使用lsblk命令可以看到,服务器存在设备vdb但使用blkid命令,系统未返回所有硬盘的UUID同时,使用lsblk -f命令,可以看到系统返回的设备挂载情况,也没有返回vdb的信息解决方案: 查询资料,看到有一个解决方法 使用sudo blkid进行查询,发现可以查询到/dev/vdb设备的U…

标准的JavaBean类书写

ptg插件 只需输入方法名和变量右键即可生成完整javabean方法

@Async异步失效的9种场景

前言 最近星球中有位小伙伴问了我一个问题:他在项目某个方法使用@Async注解,但是还是该方法还是同步执行了,异步不起作用,到底是什么原因呢? 伪代码如下: @Slf4j @Service public class UserService {@Asyncpublic void async(String value) {log.info("async:{}&qu…