首页 > 其他分享 >解决两个数相加,减,乘,除精度丢失问题

解决两个数相加,减,乘,除精度丢失问题

时间:2023-10-13 16:11:59浏览次数:30  
标签:相加 param try length toString 丢失 catch 精度 split


/**
 * 解决两个数相加精度丢失问题
 * @param a
 * @param b
 * @returns {Number}
 */
 function floatAdd(a, b) {
      var c, d, e;
      if(undefined==a||null==a||""==a||isNaN(a)){a=0;}
      if(undefined==b||null==b||""==b||isNaN(b)){b=0;}
      try {
          c = a.toString().split(".")[1].length;
      } catch (f) {
          c = 0;
      }
      try {
          d = b.toString().split(".")[1].length;
      } catch (f) {
          d = 0;
      }
      e = Math.pow(10, Math.max(c, d));
      return  (floatMul(a, e) + floatMul(b, e)) / e;
    }
    /**
    * 解决两个数相减精度丢失问题
    * @param a
    * @param b
    * @returns {Number}
    */
    function floatSub(a, b) {
      var c, d, e;
      if(undefined==a||null==a||""==a||isNaN(a)){a=0;}
      if(undefined==b||null==b||""==b||isNaN(b)){b=0;}
      try {
          c = a.toString().split(".")[1].length;
      } catch (f) {
          c = 0;
      }
      try {
          d = b.toString().split(".")[1].length;
      } catch (f) {
          d = 0;
      }
      e = Math.pow(10, Math.max(c, d));
      return (floatMul(a, e) - floatMul(b, e)) / e;
    }
    /**
    * 解决两个数相乘精度丢失问题
    * @param a
    * @param b
    * @returns {Number}
    */
    function floatMul(a, b) {
      var c = 0,
          d = a.toString(),
          e = b.toString();
      try {
          c += d.split(".")[1].length;
      } catch (f) {}
      try {
          c += e.split(".")[1].length;
      } catch (f) {}
      return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
    }
    /**
    * 解决两个数相除精度丢失问题
    * @param a
    * @param b
    * @returns
    */
    function floatDiv(a, b) {
      var c, d, e = 0,
          f = 0;
      try {
          e = a.toString().split(".")[1].length;
      } catch (g) {}
      try {
          f = b.toString().split(".")[1].length;
      } catch (g) {}
      return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), floatMul(c / d, Math.pow(10, f - e));
    }
    
    export {
      floatAdd,
      floatSub,
      floatDiv,
      floatMul
    }

标签:相加,param,try,length,toString,丢失,catch,精度,split
From: https://www.cnblogs.com/wszzj/p/17762393.html

相关文章

  • 高精度
    用处当我们做一些(SB)题时,会发现答案有可能会爆longlong,那么这时候就要用高精度了实现高精度其实就是用一个数组存数位来表示这个数,然后模拟加,减,乘的过程来算出答案高精度板子(加法)for(inti=10000;i>=1;i--){c[i]+=(a[i]+b[i])%10;c[i+1]+=(a[i]+b......
  • 高精度加法
    一、算法描述高精度问题是指两个数字非常大,超过了int,甚至longlong的范围,数字的位数甚至能达到\(10^5\),那么如果要实现这样两个大数字的运算,需要解决以下两个问题:如何存储?这样的两个数字相加是不可能用普通类型来存储的,所以我们第一个要解决的问题就是如何存储高精度数。首......
  • 大数相加
    介绍:输入两个数字,输出它们相加之后的结果。约定:输入数据共两行。第一行为一个整数a,第二行为一个整数b。输出数据共一行一个数。为a和b相加之后的结果。请尝试使用小学学过的竖式加法进行计算。将输入数据按照字符串输入后拆成一个一个的数字,然后逐位相加并求进位。输入样例127......
  • 工程实践之高精度计算器
    说明本代码使用easyx绘制计算器界面,同时使用高精度算法实现大整数的连续运算前提准备需要安装easyx图形库,具体安装和使用流程请点击链接查看代码怎么用需要新建一个工程,向工程中添加头文件和源代码,或者先把所有头文件都提取出来放到一个新的cpp(虽然是c语言,但是easyx底层实现用......
  • JavaScript 浮点数运算的精度问题
    来源:https://zhuanlan.zhihu.com/p/191395766问题描述在JavaScript中整数和浮点数都属于 Number 数据类型,所有数字都是以64位浮点数形式储存,即便整数也是如此。所以我们在打印 1.00 这样的浮点数的结果是 1 而非 1.00 。在一些特殊的数值表示中,例如金额,这样看上去......
  • Springboot 打包本地 jar 丢失处理
    pom中引用一下<dependency><groupId>com.sun.jna</groupId><artifactId>jna</artifactId><version>1.0</version><scope>system</scope><s......
  • 2023-10-07:用go语言,给定n个二维坐标,表示在二维平面的n个点, 坐标为double类型,精度最多
    2023-10-07:用go语言,给定n个二维坐标,表示在二维平面的n个点,坐标为double类型,精度最多小数点后两位,希望在二维平面上画一个圆,圈住其中的k个点,其他的n-k个点都要在圆外。返回一个圆心和半径,表示哪个圆可以圈住其中的k个点。坐标和半径都是double类型,最多保留小数点后两位。下面......
  • webpack打包丢失样式的问题
    背景在我部署好代码后,另一个同事就去访问页面查看,结果发现样式有问题,问我是不是代码没更新到?我反复去看了下时间和文件,证明代码是最新的了。但后来对比了下页面和本地的样式,发现确实跟本地代码对不上。分析过程一开始还以为是部署的代码有问题,就到服务器查看,确实是丢失了样式......
  • 理论的动态发展完完备与进化:数论Number Theory数域的进化史 与 Infinite Precision无
    InfinitePrecision:(0)数是什么?以有限的数元,度量与表示无限的现象、事物与状态,作为整个数学科学理论的根基。以Binary二进制为例,有{0,1},Constant/Dynamic系统建模上,两种state(状态)?0->1与1->0代表“change变化”?而Decimal十进制,有{0,1,2,3,4,5,6,7,8,9}十种数元,运算符号......
  • 一个高精度24位ADC芯片ADS1222的使用方法及参考电路程序成都控制器定制
    前一段时间,在做单片机、PLC、电路板、控制器/箱、仪器仪表、机电设备或系统、自动化、工控、传感、数据采集、自控系统、控制系统,物联网,电子产品,软件、APP开发设计定制定做开发项目时,有要求用到24位的高精度ADC,用于对外部信号采集。经查阅,初步获得一款满足要求的芯片:ADS1222,本文......