首页 > 其他分享 >js 金额计算时数值溢出

js 金额计算时数值溢出

时间:2024-05-07 10:22:39浏览次数:30  
标签:numStr const 0.06 Number 数值 js 溢出

js 计算乘算时数字溢出

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

  • 使用 bignumber.js 库:

  • 安装 npm run install bignumber.js

  • 使用:

  • 效果图

    // 引入BigNumber
    const 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计算乘算时数字溢出
      // 使用BigNumber
      const 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;
          }
        }
      }
    }

标签:numStr,const,0.06,Number,数值,js,溢出
From: https://www.cnblogs.com/DCL1314/p/18176652

相关文章

  • uniapp renderjs "只能行内调用, 不能通过方法调用" 学习
    故障代码app报错(h5正常),说echarts为undefined。<viewclass="content"><button@click="get"@touchend="update">update</button><imgsrc=""alt="我是alt"id="img"/></vi......
  • vue怎么设置html不缓存 但是js、css等文件做缓存
    在 Vue.js 项目中,我们通常使用 webpack 打包工具进行编译构建,其中 HTML 文件通常不做缓存,而 JS、CSS 文件需要做缓存。这可以通过 webpack 的配置实现。下面是针对你的问题的步骤:1. 打开 webpack 的配置文件 webpack.config.js 或者 webpack.prod.config.js(如果你......
  • 使用 VS Code 调试 Vue.js 项目
    Vite如果是通过create-vue创建的项目,则修改vite.config.ts配置文件,在开发环境生成sourcemap文件。exportdefaultdefineConfig({build:{sourcemap:true,},//otherconfigs...});更多配置,请参考:https://vitejs.dev/config/build-options.html#build-s......
  • vue实现使用JSZip批量下载图片
    1importJSZipfrom"jszip";2import{saveAs}from'file-saver';3import$from'jquery'45//jszip打包下载图片6functionsaveImgZip(imgUrlArrs,typeTxt){7varimgUrlArr=[];//图片列表8imgUrlArr=imgUrlAr......
  • JS进阶(二)DOM
    1.DOM(DocumentObjectModel)文档对象模型js中对象的分类有三种:用户定义对象内建对象ArrayDateMath等宿主对象(由浏览器创建的对象)modelmap可以将DOM看成一棵“树”。DOM把文档看做一棵家谱树,parent、child、sibling等。整个html文档,会保存一个文档对象document......
  • JS转义html编码
    两个方法:1、利用用浏览器内部转换器实现html转义;2、用正则表达式实现html转义; varHtmlUtil={/*1.用浏览器内部转换器实现html编码(转义)*/htmlEncode:function(html){//1.首先动态创建一个容器标签元素,如DIVvartemp=docum......
  • JS实现获取当前URL和来源URL的方法
    通用模式:Javascript正常取来源网页的URL只要用:index.html:<!DOCTYPEhtml><htmllang="zh-cn"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1,maximum-scale=......
  • Jmeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决思路
    一、问题原因用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。概念补充:内存泄露:应用使用资源之后没有及时释放,导致应......
  • 为什么我不选择React、Vue.js作为SAAS网站的前端框架
    引言“道”在中国哲学中,是一个重要的概念,表示“终极真理”。“道”这一概念,不单为哲学流派诸子百家所重视,也被宗教流派道教等所使用。大道至简的意思就是大道理是极其简单的,简单到一两句话就能说明白。所谓“真传一句话,假传万卷书”。正文在开启独立创作之路时,我也考虑过各种......
  • Python自动化测试中JSON数据处理遇到的错误
    在接口自动化测试领域,使用Excel管理测试数据是一种常见的做法。本文将分享一个实际案例,介绍在Python自动化测试框架中,如何从响应结果中提取所需数据,并探讨在处理JSON格式数据时遇到的一个典型问题及其解决方案。首先,让我们了解测试数据的基本格式。在Excel中,我们定义了一个名为ex......