zoukankan      html  css  js  c++  java
  • 关于JavaScript parseFloat() 函数精度不一致的问题

    parseFloat() 函数可解析一个字符串,并返回一个浮点数。

    它的语法是:parseFloat(string);

    注释:只有字符串中的第一个数字会被返回,开头和结尾的空格是允许的。

    提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN,如果只想解析数字的整数部分,请使用 parseInt() 方法。

    示例:

    <script type="text/javascript">
     document.write(parseFloat("10")) ;
     document.write(parseFloat("10.00")) ;
     document.write(parseFloat("10.33")) ;
     document.write(parseFloat("34 45 66")) ;
     document.write(parseFloat(" 60 ")) ;
     document.write(parseFloat("40 years"));
     document.write(parseFloat("He was 40"));
     </script>

    结果:

     10
     10
     10.33
     34
     60
     40
     NaN

    以上是parseFloat() 函数的一个简介。

    下面来分享下遇到的问题,先上一个简单的例子吧:

    例子:
    
    var num=parseFloat("234432.9")-parseFloat"0.2");
    alert(num);
    
    结果是:
    
    234432.69999999998

    很明显,这个结果不是我们想要的那个结果。

    为啥会出现这个问题,说实话,我也不太清楚。但是依靠度娘我解决了这个问题所以先把解决方法分享给大家!

    第一种:四舍五入
    Math.round(parseFloat("234432.9")-parseFloat"0.2")); 
    第二种:保留几位小数
    num.toFixed(
    2); toFixed(n)中的n代表保留几位

    第三种:扩大一定的倍数,对结果在缩小这个倍数
    var num1=parseFloat("234432.9")*1000000000000;
    var num2=parseFloat("0.2")*1000000000000;
    var num3=(num1-num2)/1000000000000;
    结果为 234432.7

    前两种做法 不太推荐,毫无疑问,前两种做法都会降低精度值!所以推荐第三种

     

     

  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/zhangnanblog/p/2747812.html
Copyright © 2011-2022 走看看