zoukankan      html  css  js  c++  java
  • javascript中的float运算精度

    有人问到一个js问题:

    var i = 0.07;
    var r = i*100;
    alert(r);

    结果为什么是7.0000000000000001?

    查了下资料,其实我们知道JavsScript中,变量在存储时并不区分number和float类型,而是统一按float存储。而javascript使用IEEE 754-2008 标准定义的64bit浮点格式存储number,按照IEEE 754的定义: http://en.wikipedia.org/wiki/IEEE_754-2008

    decimal64对应的整形部分长度为10,小数部分长度为16,所以默认的计算结果为“7.0000000000000001”,如最后一个小数为0,则取1作为有效数字标志。

    类似地,我们可以想像,1/3的结果应该是0.3333333333333333。

    那么如何校正这个值呢?

    可以用以下方法:
    一、parseInt

    var r4=parseInt(i*100);

    二、Math.round

    var r2=Math.round((i*100)*1000)/1000;

    以上两种方法都可以得到7

    附全部测试代码:

    <html>
    <head>
    <title>测试脚本</title>

    <script language="JAVASCRIPT">
    function init()
    {
    var i = 0.07;
    var r = i*100;
    var r2=Math.round((i*100)*1000)/1000;
    var r3 = eval(i*100);
    var r4=parseInt(i*100);
    var r5=parseFloat(i*100*1.0000);
    var r6=(1/3);
    alert(r);
    alert(
    "Math.round="+r2);
    alert(
    "eval="+r3);
    alert(
    "parseInt="+r4);
    alert(
    "parseFloat="+r5);
    alert(
    ""+r6);
    }
    </script>
    </head>
    <body onload="init();">

    </body>
    </html>
  • 相关阅读:
    SQLite Helper
    VS2015
    SQLite connection strings
    DELPHI中四种EXCEL访问技术实现
    jQuery
    JQuery笔记
    一张图明白jenkins和docker作用
    多线程实现的4中方法
    线程池ThreadPoolExecutor分析
    Spring Boot配置文件放在jar外部
  • 原文地址:https://www.cnblogs.com/downmoon/p/1804377.html
Copyright © 2011-2022 走看看