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

谈谈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了

前端路上的一枚小菜,欢迎同道中人来切磋!!!!!!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值