0 0

javascript中做减法时,出现小数位增加5

javascript 中为何在做减法时,结果中的小数位会增加许多。

比如 :351778.8-206233.77 =145545.02999999997
2013年2月04日 18:36

6个答案 按时间排序 按投票排序

0 0

采纳的答案

这个bug是js固有的,浮点数精度不准,你可以用下面方法来解决,思路是先放大,求和、差、积等运算后再缩小。

如:
//加法函数,用来得到精确的加法结果
//说明: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) {
    var r1, r2, m, n;
    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));
    n = (r1 >= r2) ? r1 : r2;
    return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.sub = function(arg) {
    return accSub(arg, this);
}

2013年2月04日 23:58
0 0

楼主可以参考这个:http://my.oschina.net/u/658145/blog/103751

2013年2月06日 15:32
0 0

顶楼上,学习了解浮点数,再决定如何使用它,我建议在计算过程中不出现小数,非数值计算,日常的系统基本上可以不出现小数。

2013年2月05日 23:46
0 0

toFixed(num),num为你所需要的精度,会自动四舍五入。

2013年2月04日 22:36
0 0

你可以使用toFixed(n)进行四舍五入
var result = 351778.8-206233.77
result = result.toFixed(2);

2013年2月04日 20:03
0 0

google "浮点数 圆整误差 IEEE754"

2013年2月04日 19:23

相关推荐

    js保留小数位数

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

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

    在使用JavaScript进行小数运算时,特别是加、减、乘、除四种基本运算,经常会遇到结果出现过多的小数位数问题。具体来说,当两个小数进行运算时,结果往往不是精确值,而是由于浮点数精度问题或者二进制转换所导致的...

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

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

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

    2. 移动被除数和除数的小数点,使它们的小数位数相同。 3. 执行除法运算。 4. 使用`accMul`函数来调整最终结果的小数点位置。 ##### 方法三:加法函数 `accAdd` ```javascript function accAdd(arg1, arg2) { var...

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

    在使用JavaScript进行小数运算时,由于JavaScript的内部运算规则是基于二进制实现的,而大多数小数在转换为二进制形式时无法精确表示,这就导致了小数运算时可能出现精度丢失的问题。例如,当执行0.3*1的运算时,...

    jquery精度计算代码 jquery指定精确小数位

    在JavaScript和jQuery中,精度计算通常涉及到数字的四舍五入和保留小数位数的操作。这在处理货币、百分比或任何需要精确数值表示的数据时尤为重要。`toFloat`函数是一个自定义的jQuery方法,用于将HTML元素中的数值...

    javascript版BigDecimal类库

    JavaScript是一种广泛应用于Web开发的轻量级脚本语言,它在处理大整数或高精度浮点数时存在精度问题,这是因为JavaScript的Number类型在内存中以双精度浮点数(64位)形式存储,这限制了其精确度。为了解决这个问题...

    javascript加减乘除的简单实例.docx

    总结来说,这个实例提供了一套处理JavaScript中浮点数运算精度问题的解决方案,确保在进行加、减、乘、除运算时能得到精确的结果,尤其在涉及小数的场景下。通过自定义函数和扩展字符串类型,可以更方便地在代码中...

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

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

    javascript date类型转成OLE(double)

    1. **精度问题**:由于JavaScript的Date对象在内部使用的是64位浮点数表示时间戳,因此在处理非常远的日期时可能会出现精度问题。 2. **时区问题**:在转换时需要注意时区的影响,尤其是如果涉及到不同地区间的日期...

    JavaScript 艺术之旅1

    在《JavaScript艺术之旅》的第一部分中,我们将深入探讨JavaScript语言的基础知识,特别是关于逻辑、布尔值、undefined和null,以及数值相关的概念。这些是编程中的核心元素,理解它们对于编写高效和可靠的...

    JavaScript 精确计算(2)

    1. **浮点数的不精确性**:JavaScript中的数字是基于IEEE 754标准的双精度浮点数(64位),这意味着在处理大数或小数时可能会丢失精度。例如,0.1 + 0.2 !== 0.3,因为它们在二进制下无法精确表示。 2. **...

    js中精确计算加法和减法示例

    在JavaScript中,进行浮点数加法和减法运算时,由于浮点数表示的精度问题,可能会导致不期望的结果,比如0.1 + 0.2 !== 0.3。这个问题源于计算机内部以二进制表示十进制小数时的不准确性。为了解决这个问题,我们...

    Dinerojs是一个用JavaScript处理货币值的库

    它使用大数算法来避免JavaScript浮点数运算中可能出现的不精确性,确保了在计算过程中不会丢失小数位或出现意外的误差。这对于金融计算尤其重要,因为哪怕是最微小的错误也可能导致严重的财务问题。 其次,Dinero....

    javascript加减乘除的简洁实例_.docx

    在JavaScript中,进行基本的数学运算如加、减、乘、除是相当直观的,但当我们处理浮点数时,可能会遇到精度问题。这个文档提供了一些简洁的实例,通过自定义函数来解决浮点数计算时可能出现的精度丢失问题。 首先,...

    JavaScript_这个科学计算器是一个免费的工具,通过支持几个内置函数来解决复杂的数学表达式.zip

    在输出科学计数法时,可以通过`toFixed()`方法控制小数位数。 3. **复数运算**: 虽然JavaScript原生不支持复数,但可以通过自定义类来实现。例如,我们可以创建一个名为Complex的构造函数,包含实部和虚部属性,并...

    js计算精度问题解决方案

    这是因为JavaScript的浮点数表示遵循IEEE 754标准,这可能导致在进行数学运算时出现不精确的结果。例如,简单的加法、减法、乘法或除法可能会导致预期之外的小数点后数字变化,或者在比较浮点数时产生不一致的结果。...

    js计算小数的通用方法

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

    javascript 四则运算精度修正函数代码

    但是,因为除法的特性,函数中做了一些特殊的处理:在计算完除法后将结果的小数位数统一设置为1(即`c=1;`)来防止由于小数位数不统一导致的误差。 最后,函数返回使用 `eval` 执行的计算表达式结果。这里使用 `...

    BigDecimal.js.zip

    在JavaScript编程语言中,处理大型数字的精确计算是一项挑战,因为JavaScript的内置Number类型在进行大整数或高精度浮点数运算时容易出现精度损失。为了解决这个问题,开发者通常会引入第三方库,比如"BigDecimal.js...

Global site tag (gtag.js) - Google Analytics