`

js 小数计算误差

 
阅读更多

今天在做有关基金财务数据的计算校验时,发现了js在计算小数时的误差问题,在网上找了下资料发现:

在js中,带小数的数据相加或相乘时总会出现好多位小数.这是因为在js中浮点数的计算是以2进制算的,解决方法一般是将小数化成整数后再作除法。

在网上有很多的这样的类似解决的方案:

//加法

function addValue(value1,value2){
if(value1=="")value1="0";
if(value2=="")value2="0";
var temp1=0;
var temp2=0;
if(value1.indexOf(".")!=-1)
temp1=value1.length - value1.indexOf(".")-1;
if(value2.indexOf(".")!=-1)
temp2=value2.length - value2.indexOf(".")-1;

var temp=0;

if(temp1>temp2)
temp = (parseFloat(value1)+parseFloat(value2)).toFixed(temp1);
else
temp = (parseFloat(value1)+parseFloat(value2)).toFixed(temp2);

return temp;

}

//减法

function subValue(value1,value2){
if(value1 == "") value1="0";
if(value2 == "") value2="0";
var temp1 = 0;
var temp2 = 0;
if(value1.indexOf(".") != -1)
temp1 = value1.length - value1.indexOf(".")-1;
if(value2.indexOf(".") != -1)
temp2 = value2.length - value2.indexOf(".")-1;

var temp=0;

if(temp1 > temp2)
temp = (parseFloat(value1) - parseFloat(value2)).toFixed(temp1);
else
temp = (parseFloat(value1)- parseFloat(value2)).toFixed(temp2);

return temp;

}

分享到:
评论

相关推荐

    JavaScript小数点精确计算

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

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

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

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

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

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

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

    js计算精度问题解决方案

    6. **利用整数运算**:如果可能,将计算转换为整数运算,因为整数运算在JavaScript中是精确的。例如,将金额乘以100转换为分来计算,最后再除以100转回元。 理解这些原理并学会使用相应策略,可以帮助开发者在遇到...

    JS绝对屏蔽计算误差

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

    js计算小数的通用方法

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

    js保留小数位数

    3. **科学计算**:对于复杂的科学计算或数据分析任务,精确控制数值的精度有助于减少误差累积。 ### 六、注意事项与优化建议 1. **精度问题**:虽然上述方法可以较好地处理大多数情况下的小数保留问题,但在极端...

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

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

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

    ### JavaScript避免数字计算精度误差的方法详解 #### 一、引言 在JavaScript中进行浮点数运算时,经常会出现精度误差的问题。例如,一个简单的加法运算 `0.1 + 0.2` 的结果并不是预期中的 `0.3`,而是 `0....

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

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

    js小数计算小数点后显示多位小数的实现方法

    总的来说,JavaScript中的小数计算问题可以通过理解浮点数表示的原理以及利用`.toFixed()`或自定义数学运算函数来解决。在实际应用中,需要根据对精度的要求和代码的可读性来选择合适的处理方式。在处理金融、科学...

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

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

    javascript 小数乘法结果错误的处理方法

    4. **使用库或数据类型**:有一些JavaScript库,如`decimal.js`或`big.js`,提供了专门处理高精度计算的数据类型和操作,它们可以确保在进行浮点运算时得到完全精确的结果。 5. **四舍五入或截断**:在显示结果时,...

    JS获取控件小数

    2. **转换并相加**:将两个数值分别乘以100,目的是在进行加法运算前先将数值转换为整数形式,从而避免小数运算带来的误差。 3. **恢复精度**:执行加法运算后,将结果除以100,恢复到原始精度。 4. **四舍五入并...

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

    在JavaScript开发中,处理小数加减乘除运算时经常会遇到精度丢失的问题。由于JavaScript中的数字是以IEEE 754标准的双精度64位浮点数来表示的,这就意味着它可以精确地表示的整数范围大约在-***到***之间。当超出这...

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

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

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

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

    JS 能表示的最大数值及JS Number类型数字位数及IEEE754标准1

    6. 解决方案:对于小数精度问题,可以使用乘以一个大数(比如10的适当次幂),进行整数运算,然后除回去来恢复原始值,这种方法可以减少因浮点运算造成的精度误差。 7. IEEE 754标准:该标准定义了浮点数的存储格式...

Global site tag (gtag.js) - Google Analytics