`
tomtax
  • 浏览: 4549 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

解决javascript中的浮点数计算不精确问题

阅读更多
//除法函数,用来得到精确的除法结果
//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精确结果
function accDiv(arg1,arg2){
      var t1=0,t2=0,r1,r2;
      try{t1=arg1.toString().split(".")[1].length}catch(e){}
      try{t2=arg2.toString().split(".")[1].length}catch(e){}
      with(Math){
          r1=Number(arg1.toString().replace(".",""))
          r2=Number(arg2.toString().replace(".",""))
          return (r1/r2)*pow(10,t2-t1);
      }
}

//给Number类型增加一个div方法,调用起来更加方便。
Number.prototype.div = function (arg){
      return accDiv(this, arg);
}

//乘法函数,用来得到精确的乘法结果
//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精确结果
function accMul(arg1,arg2)
{
      var m=0,s1=arg1.toString(),s2=arg2.toString();
      try{m+=s1.split(".")[1].length}catch(e){}
      try{m+=s2.split(".")[1].length}catch(e){}
      return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}

//给Number类型增加一个mul方法,调用起来更加方便。
Number.prototype.mul = function (arg){
      return accMul(arg, this);
}

//加法函数,用来得到精确的加法结果
//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//调用:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精确结果
function accAdd(arg1,arg2){
      var r1,r2,m;
      try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
      try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
      m=Math.pow(10,Math.max(r1,r2))
      return (arg1*m+arg2*m)/m
}

//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add = function (arg){
      return accAdd(arg,this);
}
 
 
//说明:javascript的减法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。  
//调用:accSub(arg1,arg2)  
//返回值:arg1减上arg2的精确结果  
function accSub(arg1,arg2){      
     return accAdd(arg1,-arg2);  
}  
  
//给Number类型增加一个sub方法,调用起来更加方便。  
Number.prototype.sub = function (arg){  
     return accSub(this,arg);  
}
分享到:
评论

相关推荐

    Javascript 浮点数精确计算

    JavaScript中的浮点数计算在许多情况下可能会出现不精确的问题,这是由于其内部使用二进制浮点数表示导致的。本文将深入探讨这个问题,并提供一种可能的解决方案。 首先,我们需要理解浮点数在计算机中的存储方式。...

    JavaScript解决浮点数计算不准确问题的方法分析

    JavaScript中的浮点数计算不准确问题源于其内部的二进制表示方式,导致某些浮点数无法精确存储,从而在进行运算时出现误差。在计算机系统中,浮点数通常按照IEEE 754标准存储,双精度浮点数(JavaScript默认使用)的...

    js浮点数处理转精确值

    在JavaScript中,浮点数处理是一项常见的任务,但由于浮点数在计算机中的表示方式,可能会导致计算结果不精确。这通常归因于二进制浮点数表示的局限性。本篇文章将深入探讨如何在JavaScript中处理浮点数,确保得到...

    javaScript实现浮点数转十六进制字符

    由于JavaScript直接使用浮点数转十六进制的功能实现并不直接,因此需要借助其他方法来实现。下面将详细介绍这些知识点以及相关的JavaScript代码实现。 1. 浮点数在计算机中的表示: 浮点数是一种小数和整数混合的数...

    precise-math.js:用于解决javascript中浮点数精确计算的问题

    precise-math.js用于解决javascript中浮点数精确计算的问题。目前只有三个方法,可以用于解决Javascript中金额计算的问题。PreciseMath.add(x1,x2) PreciseMath.sub(x1,x2) PreciseMath.mul(x1,x2)

    解决JS浮点数(小数)计算加减乘除的BUG

    总的来说,理解JavaScript浮点数计算的底层原理以及其可能导致的误差是至关重要的。通过采用适当的策略,如四舍五入、使用高精度库或调整比较方式,可以有效地解决这类问题,确保计算结果的准确性。在实际开发中,...

    JavaScript小数点精确计算

    首先,我们来理解JavaScript浮点数计算的原理。在JavaScript中,所有数字都是以64位的二进制浮点数形式存储的。由于二进制无法精确表示所有十进制小数,因此在转换过程中会出现误差,例如0.1 + 0.2 !== 0.3。这种...

    JS浮点数字操作插件floatOPS.js

    在JavaScript编程中,...总结起来,floatOPS.js是一个专注于解决JavaScript中浮点数运算精度问题的插件,通过提供加减乘除四个方法,确保了在进行浮点数运算时的精度,对于需要精确计算的场景具有很高的实用价值。

    js 浮点数加法运算

    javascript浮点数加法运算精确计算方法,能够有效避免无限循环小数的产生

    javascript避免数字计算精度误差的方法详解.docx

    ### JavaScript避免数字计算精度误差的方法详解 #### 一、引言 在JavaScript中进行浮点数运算时,经常会出现精度误差的问题。...希望本文能帮助大家更好地理解和解决JavaScript中的浮点数计算精度问题。

    Javascript中浮点数相乘的一个解决方法

    它适用于精度要求不是极端严格的普通浮点数计算。在金融、科学计算等领域,可能需要采用更严格的数学库来保证计算的准确性。在实施这种方法时,还需要考虑运算的性能和场景适用性,避免在不适合的场景中使用,从而...

    js计算精度问题解决方案

    在JavaScript编程语言中,计算精度问题是一个...如果压缩包中的"js-float-accuracy-master"库提供了实用的解决方案,那么它可能包含了一些优化的算法或工具,以帮助开发者更好地处理JavaScript中的浮点数计算精度问题。

    解决js浮点数运算的精度问题

    在javascript中进行运算的时候经常会出现浮点数的问题,导致运算结果不准确 比如:0.1 + 0.2 = 0.30000000000000004 完整demo及解决方案如下: demo .num-tags, .total-tag { text-align: center; } i { ...

    JavaScript 精确计算(2)

    在JavaScript编程语言中,精确计算是一项重要的需求,特别是在金融、科学计算或任何需要...通过深入理解和运用这些知识点,开发者可以有效地在JavaScript环境中实现高精度的数学计算,避免因浮点数不精确而导致的问题。

    JS浮点数运算结果不精确的Bug解决

    JavaScript中的浮点数运算在某些情况下可能会导致不精确的结果,这是由于其内部处理机制和IEEE-754标准的特性所致。在JavaScript中,所有的数字都以Number类型存在,本质上是按照IEEE-754标准的双精度浮点数(double...

    JavaScript 浮点数运算 精度问题

    为了解决JavaScript中的浮点数精度问题,通常可以采用以下策略: 1. **避免直接比较浮点数**:不要直接用等于(==)或不等于(!=)来比较浮点数,而是设定一个很小的容差值(epsilon),比如 `1e-14`,然后判断两个...

Global site tag (gtag.js) - Google Analytics