`
zjx2388
  • 浏览: 1330935 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

JS 浮点计算 精度缺失

 
阅读更多
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> JS 浮点计算精度问题 </title>
 
 </head>

 <body>
  


<script type="text/javascript">
<!--
    function accDiv(arg1, arg2) {  
      
        var t1 = 0, t2 = 0, t3 = 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(".", ""))  
      
        if (r2 == 0)  
            return 0;  
      
        var result = String(r1 / r2);  
      
        try { t3 = result.toString().split(".")[1].length } catch (e) { }  
      
        var index = t2 - t1 - t3;  
      
        if (index < 0) {  
            result = result.replace(".", "");  
      
            while (result.length <= Math.abs(index)) {  
                result = '0' + result;  
            }  
      
            var start = result.substring(0, result.length + index);  
            var end = result.substring(result.length + index, result.length);  
      
            result = start + '.' + end;  
      
            return Number(result);  
        }  
        else if (index > 0) {  
            result = result.replace(".", "");  
      
            while (result.length <= Math.abs(index)) {  
                result += '0';  
            }  
            return Number(result);  
        }  
        else return Number(result.replace(".", ""));  
      
    }  
      
      
    //给Number类型增加一个div方法,调用起来更加方便。  
      
    Number.prototype.div = function (arg) {  
        /// <summary>  
        ///     除法  
        /// </summary>  
        return accDiv(this, arg);  
      
    }  
    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.prototype.mul = function (arg) {  
        /// <summary>  
        ///     乘法  
        /// </summary>  
        return accMul(arg, this);  
      
    }  
      
    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  
      
    }  
      
    Number.prototype.add = function (arg) {  
        /// <summary>  
        ///     加法  
        /// </summary>  
        return accAdd(arg, this);  
    }  

	// 除法,两种写法,都可以,其他一样
	alert(accDiv(2.1,10)); 
	alert(2.1.div(10));
	// 乘法
	alert(accMul(2.1,0.01));
//-->
</script>

 </body>
</html>

 

分享到:
评论

相关推荐

    解决javascript中的浮点数计算不精确问题

    5. **使用BigDecimal类**:在某些高级应用中,可以考虑使用类似Java的`BigDecimal`类,它提供了高精度的浮点数运算,但JavaScript原生并不支持,可能需要引入第三方库。 理解JavaScript浮点数计算的局限性并采用...

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

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

    stm32f407 FPU浮点运算

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

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

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

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

    浮点运算单元通常用于处理浮点数计算,提高科学计算和图形处理等领域的效率。 对于带有FPU的处理器,如X86架构,Linux内核默认使用`-msoft-float`编译选项,这意味着内核编译为软浮点程序,即依赖于GCC编译器模拟...

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

    浮点运算在计算机科学中扮演着至关重要的角色,特别是在高性能计算、图形处理和科学计算等领域。底层硬件如何实现浮点运算涉及到多个复杂的技术层面,其中FPGA(Field-Programmable Gate Array)作为一种可编程逻辑...

    stm32f1 M3 浮点快速运算库

    然而,在需要高效执行浮点运算的应用场景中,如音频处理、信号滤波或复杂的数学计算,这种不足会成为性能瓶颈。为了解决这一问题,开发者通常会采用优化的浮点运算库来提升性能。 "stm32f1 M3 浮点快速运算库"就是...

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

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

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

    浮点运算在数字信号处理、图像处理、高性能计算等领域的应用广泛,因为它们可以提供比定点运算更高的精度和更大的动态范围。然而,浮点运算的硬件实现相对复杂,涉及到阶码处理、尾数运算等多个步骤,因此在FPGA上...

    nVIDIA显卡CUDA性能测试工具,可测试nVIDIA显卡的浮点运算性能

    CUDA-Z的性能测试通常包括单精度(FP32)和双精度(FP64)浮点运算的测试,单精度提供更高的运算速度,而双精度虽然速度较慢,但精度更高,适用于对精度要求严格的科学计算。 在使用CUDA-Z进行测试时,用户可以观察...

    c51fps.lib浮点运算库

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

    FP系列浮点运算指令.rar

    早期的处理器可能只有基本的浮点运算指令,但随着技术的发展,现代处理器已经支持更高级的指令,如向量运算和多精度浮点运算,这些指令可以同时处理多个浮点数,显著提高了并行计算的能力。 FP系列浮点运算指令集...

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

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

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

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

    TI dsp28335浮点运算库

    TI公司的TMS320F28335是一款高性能浮点数字信号处理器(DSP),在嵌入式系统中广泛应用于需要复杂计算和实时处理的应用,如音频、视频处理、工业自动化、通信以及图像处理等领域。TI官方提供的浮点运算库是针对这款...

    基于51单片机的超强科学计算器--精确浮点运算

    总的来说,这个基于51单片机的超强科学计算器项目,结合了高性能的浮点运算、广泛的数值范围和高精度显示,为用户提供了一个强大的计算工具。而错误检测机制的引入,进一步提升了使用的安全性和可靠性。对于学习...

    js中浮点类型数据的计算

    js中浮点类型数据的计算 7.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)  我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998  怎么会这样,两个只有一位小数的数字...

    浮点运算器 Verilog

    浮点运算器是数字系统设计中的一个重要组成部分,特别是在高性能计算、图形处理和嵌入式系统等领域。64位双精度浮点运算器更是如此,它能够处理大量的数据并执行复杂的数学运算,例如加减乘除、指数和对数等。在...

    Javascript 浮点运算精度问题分析与解决

    ### Javascript 浮点运算精度问题分析与解决 #### 知识点一:浮点数精度问题的普遍性 首先需要明确的是,浮点运算精度问题并不仅仅存在于JavaScript中,这实际上是计算机科学中的一个普遍问题。原因在于计算机使用...

    单精度浮点运算单元的FPGA设计与实现.pdf

    单精度浮点运算单元设计与实现是计算机硬件架构领域的重要课题之一,尤其是在高性能计算需求日益增长的今天,优化浮点运算单元(FPU)的设计对于提升微处理器的性能至关重要。本论文的主题《单精度浮点运算单元的...

Global site tag (gtag.js) - Google Analytics