zoukankan      html  css  js  c++  java
  • 原生JS实现四舍五入

    在使用原有JS的 toFixed 实现 四舍五入时,如果位数过多,并且最后一位不为0时,四舍五入不准备,所以动手写了一个四舍五入的方法,经过2个阶段

    1:正整数四舍五入

    2:负数四舍五入

    如果需要实现 四舍五入 ,只需要将下边的代码引入即可 

     1 //toFixed兼容方法,四舍五入
     2 Number.prototype.toFixed = function (len) {
     3     if (len > 20 || len < 0) {
     4         throw new RangeError('toFixed() digits argument must be between 0 and 20');
     5     }
     6     // .123转为0.123
     7     var number = Number(this);
     8     if (isNaN(number) || number >= Math.pow(10, 21)) {
     9         return number.toString();
    10     }
    11     if (typeof (len) == 'undefined' || len == 0) {
    12         return (Math.round(number)).toString();
    13     }
    14     var result = number.toString(),
    15         numberArr = result.split('.');
    16 
    17     if (numberArr.length < 2) {
    18         //整数的情况
    19         return padNum(result);
    20     }
    21     var intNum = numberArr[0], //整数部分
    22         deciNum = numberArr[1],//小数部分
    23         lastNum = deciNum.substr(len, 1);//最后一个数字
    24 
    25     if (deciNum.length == len) {
    26         //需要截取的长度等于当前长度
    27         return result;
    28     }
    29     if (deciNum.length < len) {
    30         //需要截取的长度大于当前长度 1.3.toFixed(2)
    31         return padNum(result)
    32     }
    33     //需要截取的长度小于当前长度,需要判断最后一位数字
    34     result = intNum + '.' + deciNum.substr(0, len);
    35     if (parseInt(lastNum, 10) >= 5) {
    36         //最后一位数字大于5,要进位
    37         var times = Math.pow(10, len); //需要放大的倍数
    38         var changedInt = Number(result.replace('.', ''));//截取后转为整数
    39         var fu = 1/changedInt < 0;// 为true 时,则 changedInt < 0 或者 changedInt = -0,否则为正数或等于0
    40         if(fu){
    41             changedInt--;//整数进位
    42         }else{
    43             changedInt++;//整数进位
    44         }
    45         changedInt /= times;//整数转为小数,注:有可能还是整数
    46         result = padNum(changedInt + '');
    47     }
    48     return result;
    49     //对数字末尾加0
    50     function padNum(num) {
    51         var dotPos = num.indexOf('.');
    52         if (dotPos === -1) {
    53             //整数的情况
    54             num += '.';
    55             for (var i = 0; i < len; i++) {
    56                 num += '0';
    57             }
    58             return num;
    59         } else {
    60             //小数的情况
    61             var need = len - (num.length - dotPos - 1);
    62             for (var j = 0; j < need; j++) {
    63                 num += '0';
    64             }
    65             return num;
    66         }
    67     }
    68 }
  • 相关阅读:
    切换某个窗口为当前窗口并显示在最前面---非置顶
    C语言算法-求两直线夹角计算公式
    Qt编译时MinGW去掉对gcc动态库的依赖
    解决不能从 WTL::CString 转换为 ATL::CSimpleString & 的问题
    gcc编译器对宽字符的识别
    4月10日学习笔记——jQuery选择器
    HTML5
    4月8日学习笔记(js基础)
    网站易用性2
    网站易用性
  • 原文地址:https://www.cnblogs.com/zwb1234/p/12356069.html
Copyright © 2011-2022 走看看