zoukankan      html  css  js  c++  java
  • 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 };

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

  • 相关阅读:
    IE6碰到的兼容问题小结
    Ueditor的asp版本,上传测试无问题
    localStorage存取json数据
    asp版 QQ登录 oauth2.0
    phoneGap API调用摄像头并上传图片
    ASP.NET Ajax 控件之应用一(CollapsiblePanelExtender控件的使用)
    web网页配色
    DispatcherTimer与Dispatcher小小应用
    小说ICommand
    例说INotifyPropertyChanged接口
  • 原文地址:https://www.cnblogs.com/ygjoe/p/8708820.html
Copyright © 2011-2022 走看看