zoukankan      html  css  js  c++  java
  • js toFixed 真正四舍五入

    真正四舍五入

    //toFixed兼容方法,四舍五入
    Number.prototype.toFixed = function (len) {
        if (len > 20 || len < 0) {
            throw new RangeError('toFixed() digits argument must be between 0 and 20');
        }
        // .123转为0.123
        var number = Number(this);
        if (isNaN(number) || number >= Math.pow(10, 21)) {
            return number.toString();
        }
        if (typeof (len) == 'undefined' || len == 0) {
            return (Math.round(number)).toString();
        }
        var result = number.toString(),
            numberArr = result.split('.');
    
        if (numberArr.length < 2) {
            //整数的情况
            return padNum(result);
        }
        var intNum = numberArr[0], //整数部分
            deciNum = numberArr[1],//小数部分
            lastNum = deciNum.substr(len, 1);//最后一个数字
    
        if (deciNum.length == len) {
            //需要截取的长度等于当前长度
            return result;
        }
        if (deciNum.length < len) {
            //需要截取的长度大于当前长度 1.3.toFixed(2)
            return padNum(result)
        }
        //需要截取的长度小于当前长度,需要判断最后一位数字
        result = intNum + '.' + deciNum.substr(0, len);
        if (parseInt(lastNum, 10) >= 5) {
            //最后一位数字大于5,要进位
            var times = Math.pow(10, len); //需要放大的倍数
            var changedInt = Number(result.replace('.', ''));//截取后转为整数
            var fu = 1/changedInt < 0;// 为true 时,则 changedInt < 0 或者 changedInt = -0,否则为正数或等于0
            if(fu){
                changedInt--;//整数进位
            }else{
                changedInt++;//整数进位
            }
            changedInt /= times;//整数转为小数,注:有可能还是整数
            result = padNum(changedInt + '');
        }
        return result;
        //对数字末尾加0
        function padNum(num) {
            var dotPos = num.indexOf('.');
            if (dotPos === -1) {
                //整数的情况
                num += '.';
                for (var i = 0; i < len; i++) {
                    num += '0';
                }
                return num;
            } else {
                //小数的情况
                var need = len - (num.length - dotPos - 1);
                for (var j = 0; j < need; j++) {
                    num += '0';
                }
                return num;
            }
        }
    }
  • 相关阅读:
    Kibana查询说明
    windows下安装python 且 安装pip
    pycharm编辑器,各种设置及配置修改
    用python输出未来时间,递增
    window 下python2.7与python3.5两版本共存设置
    python 运算符
    python 运算及注释
    js 实现动态的图片时钟
    js table的笔记,实现添加 td,实现搜索功能
    js实现图片无缝连接
  • 原文地址:https://www.cnblogs.com/xiaoruilin/p/12963962.html
Copyright © 2011-2022 走看看