六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 25|回复: 0

你注意到toFixed()的奇异了吗?

[复制链接]

升级  7.6%

174

主题

174

主题

174

主题

进士

Rank: 4

积分
538
 楼主| 发表于 2013-1-29 09:01:36 | 显示全部楼层 |阅读模式
 
 今天有朋友写代码的时候遇到了一个toFixed的问题,其实这个是一个很老的问题了。
 简单记录一下,方便大家以后查看吧。
 
当然先介绍一下toFixed()这个api吧。
 
定义和用法
 
     toFixed()方法可把Number四舍五入为指定小数位数的数字
 

/*参数num 必需,规定小数的位置 0~20之间,包括0和20              如果省略,就是0*/NumberObject.toFixed(num);  
 
问题还原
 

var num = 0.009;alert(num.toFixed(2)); 
IE测试下会发现弹出的是0.00
 
 
当然有的同学到这里就觉得结束了,恩,我知道了一个原生api的bug
 
呵呵 坚持一下,下面给你解决一下这个问题
 

/*改prototype.toFixed吧虽然和buxiang这样做遵循原生的返回的string*/Number.prototype.toFixed = function(n){   //Math.pow(10,n)-----10的n次方   //比如n是2,this是0.009 -----   //this * Math.pow( 10, s ) ------      0.8999999999999999   //parseInt(this * Math.pow( 10, s ) + 0.5) -----1   //typeof (0.009.toFixed(2))  -----stringreturn (parseInt(this*Math.pow(10,n)+0.5)/Math.pow(10,n)).toString() }  
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表