• 原生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 }
  • 相关阅读:
    PTA 7-9 空心字母金字塔 (10分)【待优化】
    PTA 7-12 交换最小值和最大值 (15分)
    PTA 7-8 分队列 (10分)
    PTA 7-6 计算阶乘和 (10分)
    PTA 7-5 得分计算器 (20分)
    PTA 7-4 有重复的数据 (10分)
    PTA 7-1 数组元素循环右移问题 (20分)
    PTA 7-1 换硬币 (20分)
    PTA 7-6 又来一个上三角数字三角形 (10分)【待完善】
    PTA 7-5 画菱形 (10分)
  • 原文地址:https://www.cnblogs.com/zwb1234/p/12356069.html
Copyright © 2020-2023  润新知