资讯专栏INFORMATION COLUMN

js中的toFixed保留小数位的功能优化

Cheriselalala / 3245人阅读

摘要:线看效果保留了一个无效的位,有时候为了数据整齐化,有必要加上这个。自己实现了一个解决这个问题的方法默认保留小数如果不是数字,直接返回如果不是小数,返回判断保留位的下一位是否大于,四舍五入移除多余的

线看效果:

1.1.toFixed(2);// 1.10

保留了一个无效的0位,有时候为了数据整齐化,有必要加上这个0。如果不想要呢?toFixed有办法解决吗?

比如:保留两位小数

1.001; // 我想要1,而不是1.00

这种情况toFixed是做不到的

搜索了一下,暂时没有发现有这样的方法,哪位朋友找到@我一下。
自己实现了一个解决这个问题的方法:

Number.prototype.toFixedNo = function(fixed) {
    var num = this;
    // 默认保留小数
    var fixed = fixed || 0;
    // 如果fixed不是数字,直接返回
    if (isNaN(fixed)) {
        return num.toString();
    } else {
        var numStr = num.toString();
        // 如果num不是小数,返回
        if (numStr.indexOf(".") < 0 || numStr.indexOf(".") == numStr.length - 1) {
            return parseInt(num);
        } else if (fixed == 0) {
            var arr = numStr.split(".");
            var integer = arr[0];
            var decimals = arr[1];
            if (parseInt(decimals) != 0) {
                if (decimals.substr(0, 1) >= 5) {
                    integer = parseInt(integer) + 1;
                }
            }
            return integer;
        } else {
            var arr = numStr.split(".");
            var integer = arr[0];
            var decimals = arr[1];

            if (fixed < decimals.length) {
                var fixedNo = decimals.substr(0, fixed);
                //  判断保留位的下一位是否大于5,四舍五入
                if (decimals.substr(fixed, 1) >= 5) {
                    fixedNo = parseInt(fixedNo) + 1;
                } else {
                    if (parseInt(fixedNo) == 0) {
                        return integer;
                    }
                    // 移除多余的0
                    fixedNo = fixedNo.replace(/0+$/, "");
                }
                decimals = fixedNo;
            }
            return integer + "." + decimals;
        }
    }
}

test:

1.04.toFixedNo(1);//1,
1.05.toFixedNo(1);//1.1
1.04.toFixedNo();//1
1.5.toFixedNo();//2

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89766.html

相关文章

  • 其实,只是再多想一点

    摘要:按照这个说法,在还是行不通的,应该得到,得到没问题,有些摸不到边了,所以自定义一下这个方法以便备用总结日益强大,各种语言逐步向它靠近。开发中一般时间很紧迫,好多东西都没工夫想,所以还有很多要优化的地方,有时候,放慢脚步,可能也是一种进步吧 Jquery再熟悉不过,其中的$.ajax封装也不陌生,其中 $.ajax({ url:url, type:GET, da...

    aboutU 评论0 收藏0
  • 数字

    摘要:中没有浮点数这种东西,但是你会发现这样一个问题,如下从数学角度来看,你会觉得不可思议,这是为什么这就跟浮点数有关。 在JavaScript只有一种数值类型number,它包括整数和带小数的十进制数(这里的整数有点特殊,指的是没有小数的十进制数,所以1.0等同于整数1)。 一、语法1、js中的小数,多余的零可以省略 let a = .1; // 默认为0.1 let b = 1.; ...

    OBKoro1 评论0 收藏0
  • 关于js小数浮点数操作出现精度问题原因以及解决方法

    摘要:我们可以利用该函数限定返回数值的位数,从而达到提高精度的效果。 一、问题的引入 今天在看基础js文章的时候发现了一个浮点数的精度问题,当打印小数相加的时候有时候会出现数值不准确的情况,如果是在做一些需要数据精度要求较高的工作的时候稍有不慎就会出现问题 console.log(0.1+0.1) //0.2 console.log(0.1+0.2) //0.3000000000000000...

    Chiclaim 评论0 收藏0
  • 「干货」细说 Javascript 浮点数精度丢失问题(内附好课推荐)

    摘要:前言最近,朋友问了我这样一个问题在中的运算结果,为什么是这样的虽然我告诉他说,这是由于浮点数精度问题导致的。由于可以用阶码移动小数点,因此称为浮点数。它的实现遵循标准,使用位精度来表示浮点数。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 问了我这样一个问题:在 chrome 中的运算...

    senntyou 评论0 收藏0

发表评论

0条评论

Cheriselalala

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<