`
joe.feng
  • 浏览: 134351 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

转(JS中浮点运算精度错误BUG解决方案)

阅读更多

JS中的浮点运算有时会出现精度错误的BUG,比如:0.1 + 0.2 = 0.30000000000000004

解决方案如下:

// 除法

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) { }
    r1 = Number(arg1.toString().replace(".", ""))
    r2 = Number(arg2.toString().replace(".", ""))
    return accMul((r1 / r2), Math.pow(10, t2 - t1));
 }

 

// 乘法

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 accAdd(arg1, arg2) {   
    var r1, r2, m, c;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }  
    c = Math.abs(r1 - r2);   
    m = Math.pow(10, Math.max(r1, r2))   
    if (c > 0) {   
        var cm = Math.pow(10, c);   
        if (r1 > r2) {   
            arg1 = Number(arg1.toString().replace(".", ""));   
            arg2 = Number(arg2.toString().replace(".", "")) * cm;   
        }   
        else {   
            arg1 = Number(arg1.toString().replace(".", "")) * cm;   
            arg2 = Number(arg2.toString().replace(".", ""));   
        }   
    }   
    else {   
        arg1 = Number(arg1.toString().replace(".", ""));   
        arg2 = Number(arg2.toString().replace(".", ""));   
    }   
    return accDiv((arg1 + arg2),m); 
}

 

分享到:
评论

相关推荐

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

    本文将详细介绍如何解决JavaScript中的浮点型运算BUG,并提供一些实用的函数来实现更精确的计算。 首先,我们要理解JavaScript中的浮点数运算误差。在计算机内部,浮点数是以二进制形式存储的,但不是所有十进制...

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

    JavaScript中的浮点型运算在处理小数时可能会出现精度问题,这是由于计算机内部表示浮点数的方式导致的。在JS中,浮点数运算不是完全精确的,这在进行涉及小数的加、减、乘、除操作时尤为明显。为了解决这个问题,...

    js中浮点类型数据的计算

     我Google了一下,发现原来这是JavaScript浮点运算的一个bug。  比如:7*0.8 JavaScript算出来就是:5.6000000000000005  网上找到了一些解决办法,就是重新写了一些浮点运算的函数。  下面就把这些方法摘录...

    js中Number数字数值运算后值不对的解决方法.docx

    JavaScript 中 Number 数字数值运算后值不对的解决方法 ...解决 JavaScript 中 Number 数字数值运算后值不对的问题需要重新编写浮点运算函数或使用 Number 的 prototype 方法来实现精确的浮点运算。

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

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

    金蝶Automation 错误解决方案

    金蝶Automation 错误解决方案是指在金蝶系统中出现的Automation 错误和拒绝的权限故障的解决方法。下面将对该解决方案进行详细的解释和分析。 一、故障之“Automation 错误” Automation 错误是指在金蝶系统中...

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

    在实际开发过程中,当遇到JavaScript中的小数运算精度问题时,可以通过使用上述的方法来保证运算结果的精度。需要注意的是,尽管这些方法可以解决大部分精度问题,但可能会引入额外的计算量,从而影响程序的性能。...

    css常用公共样式 与bug解决方案

    8. **Bug解决方案**:在实际开发中,可能会遇到各种CSS问题,如盒模型计算错误、浮动元素造成的塌陷、文字溢出等。理解并掌握这些常见bug的解决方法,可以提高工作效率。例如,使用`clearfix`类解决浮动元素引起的...

    详解小程序输入框闪烁及重影BUG解决方案

    这里提供了两种解决方案。各有各的优势,请选取合适的方案: 一、弃用v-model,使用@input 适用于input组件单纯是用户手动输入的,而没有像授权获取手机号,然后自动填入input组件中。这种需要赋予初始value的情况。...

    [Linux]Ubuntu安装pip及其各种bug解决方案.docx

    Ubuntu 安装 pip 及其各种 bug 解决方案 本文档旨在提供 Ubuntu 安装 pip 及其各种 bug 解决方案的详细指南。pip 是 Python 的包管理工具,它允许用户轻松安装和管理 Python 软件包。在 Ubuntu 系统中,安装 pip 是...

    微信小程序跳坑指南,存在的bug及解决方案(自制PPt)

    微信小程序入门介绍(自制PPt)。本人已开发2款小程序,公司分享会,需要介绍小程序。固出此ppt介绍小程序入门,及自己遇到的坑,和一些小门路,存在的bug及解决方案。

    详解JavaScript的BUG和错误

    首先,JavaScript中的BUG可以大致分为两类:一类是由于程序逻辑设计(即编程思想)混乱导致的错误;另一类是在将设计思想转化为代码的过程中引入的错误。逻辑设计错误往往难以诊断和修复,因为它们可能涉及到程序的...

    1.css常用公共样式 与bug解决方案

    本资料包“1.css常用公共样式 与bug解决方案”聚焦于这些关键点,并提供了针对常见问题的解决方案。 一、公共样式的应用 1. 基本布局:如全局的margin和padding清零,以避免元素间的默认间距;流体布局的实现,如...

    封装mathjs的文件,用于解决js的精度问题导致的计算bug

    封装mathjs的文件,用于解决js的精度问题导致的计算bug

    MyEclipse10.x导出war包bug解决方案

    MyEclipse10.x导出war包bug解决方案,只需在已破解后的common下替换一个jar即可

    SSH_常见错误与解决方案

    ### SSH常见错误与解决方案 #### 一、Java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource 错误 在使用MyEclipse进行Struts项目开发时,配置`struts-config.xml`文件中的`data-sources`时...

    sybase 3414 错误解决方案 附带错误日志

    在`3414错误解决方案.txt`文档中,可能包含了解决此特定错误的步骤和建议。通常,Sybase提供了几种方法来处理这样的问题: 1. **使用DBCC CHECKDB命令**:这是一个强大的工具,用于检查数据库的完整性和一致性。...

Global site tag (gtag.js) - Google Analytics