`
hhyyllgg
  • 浏览: 28339 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js中小数计算误差解决办法

 
阅读更多
js的小数计算根据二进制来计算,则对0.2这种无限循环的小数进行加减乘除的时候 会产生误差
 
  下面是网上找的加减乘除的几个方法,原理是转换为整数计算 ,然后再复位


 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) 
} 

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); 
	} 
} 

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    
}    	
function accSub(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    
}   
分享到:
评论
3 楼 itabclichao 2015-05-19  
  分享,好人有好报,解决了我的一哥大问题,已收藏
2 楼 hhyyllgg 2012-01-06  
colinzhy 写道
似乎这个accAdd函数计算仍然有误差啊,比如计算1.1+1.11的时候结果会出现2.210000000000004

我试了一下,确实如你所说,原因应该是小数在执行arg1*m+arg2*m在执行乘法的时候又产生误差,改为accMul(arg1,m)+accMul(arg2,m)就可以了
1 楼 colinzhy 2012-01-06  
似乎这个accAdd函数计算仍然有误差啊,比如计算1.1+1.11的时候结果会出现2.210000000000004

相关推荐

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

    在JavaScript中,浮点数(小数)的计算可能会出现一些看似奇怪的结果,这主要是由于计算机内部表示浮点数的方式导致的。这个问题是许多开发者在编写JavaScript代码时可能遇到的一个常见陷阱。本文将深入探讨这个问题...

    JavaScript小数点精确计算

    3. **使用BigInt类型**:BigInt是JavaScript ES2019引入的一种新数据类型,用于处理大整数,但它不适用于小数计算。 4. **使用库**:对于更复杂的数学运算,可以使用一些专门处理精确计算的库,比如题目中提到的...

    js计算精度问题解决方案

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

    JS小数运算出现多为小数问题的解决方法

    在进行JavaScript小数运算时,我们经常会遇到由于浮点数表示的限制而导致的精度问题。由于浮点数在计算机内部是以二进制形式表示的,部分十进制小数无法转换成一个精确的二进制小数,这导致了在运算过程中出现误差。...

    js小数运算出现多位小数如何解决

    总之,解决JavaScript小数运算误差的关键在于理解浮点数表示的局限性,并采取适当的策略来保持或恢复精度。`toFixed`、转换为整数以及自定义运算函数都是可行的方法,但需根据具体需求和性能考虑来选择合适的方式。...

    js计算小数的通用方法

    在JavaScript中进行数学运算时,尤其是在处理小数运算时,由于JavaScript内部采用的是浮点数表示法(基于IEEE 754标准),这可能会导致计算结果出现精度误差。例如,`0.1 + 0.2` 的结果并不等于 `0.3`,这是因为二...

    js保留小数位数

    尤其是在涉及财务计算、数据统计等对精度有较高要求的应用场景中,如何精确控制数字的小数位数变得尤为重要。本文将详细介绍一种常用的保留小数位数的方法,并深入探讨其工作原理与应用场景。 #### 核心知识点解析 ...

    JS绝对屏蔽计算误差

    JS绝对屏蔽计算误差的一个算法,方法是直接顺子思路写的,所以略显臃肿,但却对可以屏蔽,网上其他的一些用10的N次幂来解决一样有失效的,因为小数在乘以10N次幂的时候已经出现误差了,后续所有操作都失效。...

    javascript解决小数的加减乘除精度丢失的方案

    2. 加法(accAdd)函数:此函数首先计算出两个数的小数部分的位数,然后将这两个数乘以10的相应幂次方,转换成整数后进行加法运算,再除以10的幂次方来还原原始小数,以解决加法运算中的精度问题。 3. 减法(Subtr...

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

    在JavaScript中处理浮点数计算时,精度误差是一个常见但又必须解决的问题。通过上述方法,我们可以有效地避免这类问题的发生,确保计算结果的准确性。不同的应用场景可能需要采用不同的策略,开发者应根据实际情况...

    js加减乘除丢失精度问题解决方法

    在javascript中,当你使用小数进行加减乘除运算时,你会发现,所得到的结果有时后面带有长长的一段小数,使运算变得复杂,并且影响计算结果。上网查询了一下原因,大致如下:在javascript中,带小数的数据运算时总会...

    js 对小数加法精度处理示例说明

    这是因为在计算机内部,浮点数是以二进制形式存储的,而某些十进制小数无法精确地转换为二进制,导致计算过程中出现误差。这种误差在进行多次运算或累加时可能会积累,造成明显的结果偏差。 为了处理这个问题,...

    javascript小数精度丢失的完美解决方法

    这就是所谓的JavaScript小数精度丢失问题。 针对这一问题,文章提出了几种解决方法,包括乘法、加法、减法运算中对精度进行控制的函数。 在进行乘法运算时,可以通过累加两个乘数的小数位数来重新计算乘积,并最终...

    Javascript浮点数乘积运算出现多位小数的解决方法

    Javascript是一种广泛使用的脚本语言,在网页编程中占据核心地位。...不过,开发者在实际开发中应当意识到计算机的这种表示和运算误差,根据实际的应用场景,选取合理的处理方式以达到最好的结果。

    js中浮点型运算BUG的解决方法说明.docx

    首先,我们要理解JavaScript中的浮点数运算误差。在计算机内部,浮点数是以二进制形式存储的,但不是所有十进制小数都能精确地转换为二进制。因此,当进行浮点数运算时,如加、减、乘、除,可能会出现看似不合理的...

    javascript小数精度丢失的完美解决方法.docx

    ### JavaScript小数精度丢失的完美解决方法 #### 引言 在JavaScript中处理浮点数时,经常会遇到小数精度丢失的问题。这是由于JavaScript内部使用的是64位浮点数格式(即IEEE 754标准)来表示数值,而这种格式在...

    javascript解决小数的加减乘除精度丢失的方案.docx

    这主要是因为JavaScript中的数字采用IEEE 754标准下的双精度64位浮点数格式表示,而这种表示方法对于某些特定的十进制小数无法做到精确表示,从而导致了运算结果出现误差。 #### 二、精度丢失的原因 在深入探讨...

    JS中乘法的浮点错误解决方法

    可以使用一些专门处理高精度计算的JavaScript库,如`decimal.js`或`big.js`,这些库提供了一套完整的高精度数学运算API,可以避免浮点误差。 5. **自定义加法、减法、乘法、除法函数**: 上述代码中还展示了...

    JS获取控件小数

    根据给定文件的信息,我们可以总结出以下关于JavaScript(简称JS)获取控件中小数操作的知识点。 ### JS获取控件小数操作 在Web开发中,处理表单数据时经常需要进行数值运算,并且通常需要对结果进行四舍五入或者...

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

    在JavaScript编程中,浮点数计算不精确是一个常见的问题,源于其内部的二进制浮点数表示方式。本文将深入探讨这个问题,并提供解决方案。首先,我们要理解为什么会出现这种不精确性。 JavaScript遵循IEEE 754标准来...

Global site tag (gtag.js) - Google Analytics