论坛首页 Web前端技术论坛

你还在用toFixed来进行四舍五入么?

浏览 40941 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-01-02  
之前一直在用这个js自带的toFixed函数来进行四舍五入的操作,可是,在实际使用过程中却遇到了问题。

比如
var money=0.00542;//0.006;
alert(Number(money).toFixed(2));
//0.00


可以看出上面的结果是错误的,下面的方法通过巧妙的使用Math.round函数,完全可以解决数值很小时的精度问题。

var money=0.00542;//0.006;
alert(Number(money).toFixed(2));

function round2(number,fractionDigits){
	with(Math){
		return round(number*pow(10,fractionDigits))/pow(10,fractionDigits);
	}
}
alert(round2(money,2));//0.01


round 方法
返回与给出的数值表达式最接近的整数。

Math.round(number)

必选项 number 参数是要舍入到最接近整数的值。

说明
如果 number 的小数部分大于等于 0.5,返回值是大于 number 的最小整数。否则,round 返回小于等于 number 的最大整数。
   发表时间:2009-01-05  
原来还有这个问题。。
以前都没注意呢
0 请登录后投票
   发表时间:2009-01-05  
那2.00532的值呢
你这个没有整数部份是可以的
有整数部份还要做其他处理呢
0 请登录后投票
   发表时间:2009-01-05  
hanfeng450 写道
那2.00532的值呢
你这个没有整数部份是可以的
有整数部份还要做其他处理呢


怎么不可以了?你自己测试下
1 请登录后投票
   发表时间:2009-01-05  
偶在FF里测试:
引用
>>> 0.00542.toFixed(2)
"0.01"

完全正确,不知ie6如何
0 请登录后投票
   发表时间:2009-01-06  
LS的,我都是用ie7测试的,还是存在这个问题。。。
0 请登录后投票
   发表时间:2009-07-29  
我们在使用的过程中发现还是会有一些问题,
比如55.555保留两位小数,可以变成55.56,
但是555.555,保留两位就变成555.55了

0 请登录后投票
   发表时间:2009-11-23  
受教了,谢谢! 我也碰到了相同的问题,用了toFixed以后总是会出现计算错误的问题。本来是好好的数据变成0.0000 现在用了你的方法后不出现错误了,谢谢共享!
0 请登录后投票
   发表时间:2009-11-24  
我在IE7试过了,没出现楼主描述的问题。
0 请登录后投票
   发表时间:2009-11-24  
QMax 写道
我们在使用的过程中发现还是会有一些问题,
比如55.555保留两位小数,可以变成55.56,
但是555.555,保留两位就变成555.55了



在IE7测试,使用toFixed确实如此。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics