博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js中toFixed重写
阅读量:7054 次
发布时间:2019-06-28

本文共 1022 字,大约阅读时间需要 3 分钟。

 

在测试原生的toFixed发现,它在个浏览器上表现不一致,并且有些值在保留小数时得到的结果并不是想要,如在chrome下测试:

 所以针对toFixed方法不准的问题,我们进行方法改造:

主要思路是:对原始数值扩大一定倍数,然后再判断小数点后面的数字是否大于等于5(如果有小数点的话),然后再除以上一步的倍数,此时再看小数点的情况,如果小数点后面不满要保留的位数,可以补0。 此外,要考虑负数的情况,所以,这里会先将符号拿出来,再处理数值,最后处理完成后再把符号加上。

Number.prototype.toFixed = function (n){    n = n ? n : 0;  //保留的小数位数    var num = this+"";    var sign = '';    //去符号    if(num.indexOf("-")>-1 || num.indexOf("+")>-1){        sign = num.substr(0,1);  //符号        num = num.substr(1,num.length-1);    }    num = num*Math.pow(10,n)+'';    //小数点后面的数字是否大于等于5,是 进1    var i = num.indexOf(".");    if(i>-1){        if(num.substr(i+1,1)>=5){            num = 1+num*1; //转为数字运算 否则会进行字符串运算        }    }    num = Math.floor(num);    var result = sign+num / Math.pow(10,n);    result +=''+ new Array(n+1).join("0");  //位数不够的 补0    var dot_index = result.indexOf(".");    var int_part = result.substr(0,dot_index);    var dot_part = result.substr(dot_index+1,n);    return int_part+"."+dot_part;}

 

转载于:https://www.cnblogs.com/lydialee/p/8446739.html

你可能感兴趣的文章
live555 编译
查看>>
MTU 检测和设置
查看>>
树莓派新版-入门配置 带配置选项翻译
查看>>
ssl问题
查看>>
Css布局系列——圣杯布局
查看>>
BaseAdapter教程(1) 最简单地使用BaseAdapter
查看>>
python包管理
查看>>
【377】only one element in a tuple
查看>>
【046】◀▶ HTML 关键字
查看>>
css---媒体查询
查看>>
浅谈Js原型的理解
查看>>
Spark技术内幕: Task向Executor提交的源码解析
查看>>
git for c#,文件改动内容
查看>>
linux syslog 日志采集系统搭建
查看>>
xuyaojiade
查看>>
大神的博客地址
查看>>
50道Java线程面试题汇总
查看>>
阿里云
查看>>
maven可用镜像
查看>>
hihocoder 1582 : Territorial Dispute (计算几何)(2017 北京网络赛E)
查看>>