您的位置:首页 > Web前端 > JavaScript

js 自定义保留小数四舍五入

2016-01-04 18:20 549 查看
谈谈js运算的那些坑,比如:0.1+0.7居然不是等于0.8;toFixed()保留小数位在某些时候居然不是四舍五入的,万恶的一切都源于二进制,因为某些十进制数字用二进制表示是无限循环的,所以才回出现误差,那其他语言为什么不会呢?到底为什么呢.......,其实也是会的,只不过人家已经考虑到这个问题,封装处理而已,最近遇到一个问题,解决toFixed()在保留小数点较多的时候无法四舍五入的问题,所以决定自己写一个函数挂在Number类上,不扯蛋了,上代码:

Number.prototype.myTofixed=function(n){
var n=n||2;//默认保留两位小数
var number=this;
var multipe=Math.pow(10,n); //把一个数放大10的次方倍
if(!isNaN(number)){

  number=Math.round(number*multipe);//四舍五入

  //处理小数点

  number=number.toString().split("");

  if(number.length<n+1){//当数值小于1的时候的处理方法

  for(var i=0;i<=n+1-number.length;i++){

  number.splice(0, 0,"0");

  }

  }

  number.splice(number.length-n, 0,".");  //给一个放大后的数的字符串插入小数点

  number=number.join("");

  return number
}else{
console.log('myTofixed方法只能对数字使用');
}

}

写好了之后我就开始去测试:

33.123654.myTofixed(4);  //33.1237

33.123654.myTofixed(2);  //33.12

33.myTofixed(0);//报错,我去,居然报错,这到底是为什么呢?

烧死几万个脑细胞,终于想起来了,js是弱类型语言,没有整形,都是浮点型,所以这样不可以,应该这样调用:33..myTofixed();终于看到美丽冻人的33.00了

前端路上的一枚小菜,欢迎同道中人来切磋!!!!!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息