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);
}
<script>
//除法函数,用来得到精确的除法结果
//说明: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);
}
document.writeln("未改进的运算:7*0.8="+7*0.8+"\<br>");
document.writeln("改进以后的运算:7*0.8="+(7).mul(0.8)+"\<br>");
//你可以修改代码进行其它的运算测试
</script>
分享到:
相关推荐
在JavaScript编程语言中,浮点型数值的运算可能会遇到一些精度问题,这主要是由于二进制表示浮点数的方式导致的。本文将详细介绍如何解决JavaScript中的浮点型运算BUG,并提供一些实用的函数来实现更精确的计算。 ...
在JavaScript编程中,...总结起来,floatOPS.js是一个专注于解决JavaScript中浮点数运算精度问题的插件,通过提供加减乘除四个方法,确保了在进行浮点数运算时的精度,对于需要精确计算的场景具有很高的实用价值。
5. **使用BigDecimal类**:在某些高级应用中,可以考虑使用类似Java的`BigDecimal`类,它提供了高精度的浮点数运算,但JavaScript原生并不支持,可能需要引入第三方库。 理解JavaScript浮点数计算的局限性并采用...
但是你知道吗,同样的问题放在编程语言中,或许就不是想象中那么简单的事儿了。不信?我们先来看一段 JS。 var numA = 0.1; var numB = 0.2; alert( (numA + numB) === 0.3 ); 执行结果是 false。没错,当...
首先需要明确的是,浮点运算精度问题并不仅仅存在于JavaScript中,这实际上是计算机科学中的一个普遍问题。原因在于计算机使用二进制来存储和处理数据,而有些十进制小数在转换为二进制表示时会是无限循环的。例如,...
JavaScript中的浮点型运算在处理小数时可能会出现精度问题,这是由于计算机内部表示浮点数的方式导致的。在JS中,浮点数运算不是完全精确的,这在进行涉及小数的加、减、乘、除操作时尤为明显。为了解决这个问题,...
在JavaScript中,浮点数(小数)的计算可能会出现一些看似奇怪的结果,这主要是由于计算机内部表示浮点数的方式导致的。这个问题是许多开发者在编写JavaScript代码时可能遇到的一个常见陷阱。本文将深入探讨这个问题...
具体的JavaScript代码实现中,定义了上述的DecToBinTail和DecToBinHead函数来辅助完成二进制的转换,然后通过get_float_hex函数结合这些辅助函数,按照IEEE 754标准来计算尾数和指数部分的二进制表示,并最终将这些...
在JavaScript编程中,获取界面数字并进行比较是常见的操作,特别是在处理用户输入、计算或排序时。本篇文章将深入探讨这个主题,分享一些常见的问题及其解决方案。 首先,我们需要理解JavaScript中的数字表示。...
为了克服JavaScript中的浮点数精度问题,一种有效的做法是自行编写浮点运算函数。这些函数使用字符串操作来处理数值,避免了直接使用JavaScript的浮点运算功能。以下是一些示例函数,它们可以精确地执行基本的算术...
Decimal.js 是一个专门为JavaScript设计的高精度数字计算库,它...总的来说,Decimal.js 是JavaScript开发中数字处理领域的一个强大工具,尤其对于那些需要避免浮点运算误差、确保计算精度的项目来说,它是不可或缺的。
JavaScript中的浮点运算问题主要源于数字类型(Number)的表示方式,这是由IEEE-754标准决定的。在计算机科学中,浮点数并非总是精确的,尤其是当它们以二进制形式存储时。例如,十进制的小数0.1、0.2或0.3在二进制下...
4. 精度问题:由于二进制无法精确表示所有十进制数,尤其是在小数部分,例如0.1和0.2的二进制表示是无限循环的,这会导致在计算中可能出现微小的精度损失。例如,9007199254740992加上1或3可能会丢失精度,而加上2或...
在JavaScript编程中,开发者经常会使用到parseFloat()方法,这个方法能够将字符串转换为浮点数。...通过上述方法,可以有效地解决JavaScript中parseFloat()方法的精度问题,确保程序的计算结果准确无误。
JavaScript中的浮点数运算精度问题是一个常见的编程挑战,特别是在处理涉及小数的精确计算时。在JavaScript中,所有数值都是以IEEE 754-2008标准定义的64位浮点格式存储,这与许多其他编程语言如Java相同。这个标准...
JavaScript中的浮点数是编程语言中的重要组成部分,尤其在JavaScript中,所有的数字都被视为双精度浮点数。这种数据类型是根据IEEE 754标准定义的,它使用64位编码来表示数字,其中包含1个符号位、11位指数位和52位...
在JavaScript中,浮点型运算涉及到的是数字表示和计算精度的问题。由于计算机内部是以二进制形式存储和处理数据的,而十进制的小数在转换为二进制时可能会出现无限循环,导致无法精确表示某些浮点数,这就会引发浮点...
可以使用一些专门处理高精度计算的JavaScript库,如`decimal.js`或`big.js`,这些库提供了一套完整的高精度数学运算API,可以避免浮点误差。 5. **自定义加法、减法、乘法、除法函数**: 上述代码中还展示了...