`

JS浮点计算BUG屏蔽终极解决办法

阅读更多
//四舍五入
/*JS浮点计算BUG屏蔽终极解决办法*/

/*
第一部分
重写Number函数,增加3个函数,加、乘、除
*/

Number.prototype.add = function(arg) {  
 
        return accAdd(arg, this);  
 
    }
//接口
//相除 
    Number.prototype.div = function(arg) {  
 
        return accDiv(this, arg);  
 
    }  

//乘法
//使用方法 5.mul(4)=20
    Number.prototype.mul = function(arg) {  
 
        return accMul(arg, this);  
 
    } 

//============================================

/*
第二部分
加、乘、除具体函数,
*/

//相除
    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 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 (arg1 + arg2) / m
    }  
分享到:
评论

相关推荐

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

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

    浅谈linux kernel对于浮点运算的支持

    如果处理器有FPU,那么在接驳FPU后,核心需要屏蔽浮点异常,让FPU处理浮点运算。如果没有FPU,处理器需要启用浮点异常,以便在遇到浮点指令时能够正确处理。否则,未被正确处理的浮点指令可能会导致不可预知的结果,...

    stm32f407 FPU浮点运算

    这款MCU内置了浮点单元(FPU),支持单精度和双精度浮点运算,极大地提高了在嵌入式系统中的浮点计算能力。本篇文章将深入探讨STM32F407的FPU浮点运算,以及如何利用MDK(Keil uVision)进行源代码开发。 浮点运算...

    stc15系列单片机浮点运算性能测试

    在许多实际应用中,浮点运算的需求日益增强,例如在数学计算、信号处理等领域。STC15系列单片机虽然基于传统的8位架构,但通过内置硬件支持或软件库的方式,也能实现浮点运算功能。本文将详细探讨STC15系列单片机的...

    js中浮点类型数据的计算

    js中浮点类型数据的计算 7.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位... 网上找到了一些解决办法,就是重新写了一些浮点运算的函数。  下面就把这些方法摘录下来,以供遇到同样问题的朋友参考:

    底层硬件如何实现浮点运算_浮点fpga_浮点运算_fpga_FPGA浮点运算_硬件_

    底层硬件如何实现浮点运算涉及到多个复杂的技术层面,其中FPGA(Field-Programmable Gate Array)作为一种可编程逻辑器件,为浮点运算提供了灵活且高效的解决方案。 浮点运算在硬件中的实现主要分为两部分:浮点...

    stm32f1 M3 浮点快速运算库

    为了解决这一问题,开发者通常会采用优化的浮点运算库来提升性能。 "stm32f1 M3 浮点快速运算库"就是针对这种情况设计的,它利用汇编语言编写,直接针对Cortex-M3的硬件特性进行优化。汇编语言编程能够充分利用...

    计算机组成原理:3.5 浮点运算器.ppt

    本文档主要介绍了计算机组成原理中的浮点运算器,涵盖了浮点运算方法、浮点数据表示、浮点四则运算、浮点加减法运算等知识点。 首先,浮点运算器是计算机组成原理中的一种重要组件,负责执行浮点数的四则运算。...

    c51fps.lib浮点运算库

    浮点运算对于处理涉及精确数值计算的应用至关重要,比如传感器数据处理、滤波算法或者数学运算等。然而,传统的8位单片机如8051(C51)由于其有限的硬件资源,往往不支持浮点运算或对浮点运算支持不足,这在使用Keil...

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

    曾经项目用到过的,之前在网上找到此代码,但在特定条件下除法和加法运算依然会出现BUG个人对此稍作优化 代码如下://除法函数,用来得到精确的除法结果//说明:javascript的除法结果会有误差,在两个浮点数相除的...

    TI dsp28335浮点运算库

    总的来说,TI dsp28335浮点运算库是TMS320F28335 DSP开发者的强大工具,它提供了一套高效、优化的浮点运算解决方案,可以帮助开发者轻松实现高性能的信号处理任务,节省时间和精力,提升产品的竞争力。

    浮点运算方法和浮点运算器

    浮点运算方法和浮点运算器是计算机科学中处理浮点数的重要组成部分,它们涉及到浮点数的加法、减法以及其他数学运算的实现。浮点数是一种用于表示较大或较小数值的数据类型,通常用于科学计算和工程领域,因为它们...

    FP系列浮点运算指令.rar

    FP系列浮点运算指令集是为处理器设计的一套专门用于加速浮点计算的指令,提高了计算机处理浮点运算的速度和效率。 浮点运算在硬件层面通常由浮点单元(FPU)执行,这是一个集成在CPU内部或作为独立芯片的组件。FP...

    驱动中使用整数运算模拟浮点计算的方法

    在驱动程序开发中,特别是在ARM平台的驱动程序中,由于浮点运算可能带来的性能消耗以及对硬件资源的需求,经常需要使用整数运算来模拟浮点计算。本文将深入探讨这一主题,包括Linux驱动中整数运算模拟浮点计算的策略...

    使用Vue.js及Element编写的精度浮点运算计算器源码(打开运行)

    由于javascript的浮点运算是不精确的(对于大多数编程语言都是这样),此程序使用整数来代替浮点数进行运算,最后再转化为浮点数,可以实现对设置范围内(运算范围在程序中为自定义变量range)的浮点运算实现精度...

    利用FPGA实现浮点运算的verilog代码.rar

    本资源“利用FPGA实现浮点运算的verilog代码.rar”提供了使用Verilog编程语言实现浮点运算的示例,这对于理解和掌握FPGA设计以及高速计算应用具有重要意义。 浮点运算在数字信号处理、图像处理、高性能计算等领域的...

    stm32硬件浮点使用方法

    STM32 中的浮点运算是指对浮点数进行运算的能力,浮点数是一种数据类型,它可以表示很大的数值范围。浮点运算在 STM32 中是通过硬件浮点单元(FPU)来实现的。 在 STM32F4 中,FPU 是一个可选的功能,需要在系统...

    JavaScript 浮点 运算 函数

    可是由于积分已经接近0,没办法下载了,所以还是决定把它发出来,赚几个积分。 此函数是我自己写的,虽然在网上可以搜到很多,不过我找到的都是在算法中存在基本的浮点数的运算,导致结果仍然是错误的。由于刚刚学写...

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

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

Global site tag (gtag.js) - Google Analytics