• js中Number.toFixed()方法的理解


    需求:对浮点数进行四舍五入精度获取。

    问题:直接使用Number.toFixed()会出现异常的舍入情况。

    原因:计算机浮点数存储是二进制,js的Number.toFixed()实际的精度确认规则是四舍六入五成双,逢四下舍,逢六入一,逢五时,根据浏览器内核计算结果也不尽相同。

       具体原理这里不做详细描述,各位看官可自行查阅相关资料。

    解决方法:重新Number.toFixed()方法。

    实现原理:将浮点数转化为整数,保留所需位数,再转为浮点数。

    实现代码:

     1 Number.prototype.toFixed = function (length) {
     2     var s = this + '';
     3     var len = length || 0;
     4     var result = s;
     5     var arr = s.split('.');
     6 
     7     //整数
     8     if (arr.length < 2) {
     9         if (len > 0) {
    10             result += '.';
    11             for (var i = 1; i <= len; i++) {
    12                 result += '0';
    13             }
    14         }
    15         return result;
    16     }
    17 
    18     //小数
    19     var first = arr[0];
    20     var second = arr[1];
    21 
    22     //小数点位数等于length
    23     if (second.length == len) {
    24         return result;
    25     }
    26 
    27     //小数点位数小于length
    28     if (second.length < len) {
    29         for (var k = 1; k <= len - second.length; k++) {
    30             result += '0';
    31         }
    32         return result;
    33     }
    34 
    35     //小数点位数大于length
    36     result = first + second.substr(0, len + 1);
    37     var last = Math.floor((result * 1 + 5) / 10);
    38     result = (last / Math.pow(10, len)).toFixed(len);
    39     return result;
    40 };

    备注:解决方案有很多种,这只是个人的理解,仅供参考。

  • 相关阅读:
    hdu1238 Substrings
    CCF试题:高速公路(Targin)
    hdu 1269 迷宫城堡(Targin算法)
    hdu 1253 胜利大逃亡
    NYOJ 55 懒省事的小明
    HDU 1024 Max Sum Plus Plus
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1257 最少拦截系统
    HDU 1069 Monkey and Banana
    HDU 1104 Remainder
  • 原文地址:https://www.cnblogs.com/ygjoe/p/8708820.html
Copyright © 2020-2023  润新知