由toFixed带来的潜在问题,您注意到了吗

转载 2012年03月28日 09:30:21
我相信大家在写脚本处理数字的时候肯定会经常用到toFixed方法。

     一、toFixed能做什么?

以下是摘自网络的toFixed的介绍:

toFixed 方法:

返回一个字符串,代表一个以定点表示法表示的数字。

numObj.toFixed([fractionDigits])

参数

numObj

必选项。一个 Number 对象。

fractionDigits

可选项。小数点后的数字位数。其值必须在 0 – 20 之间,包括 0 和 20。

说明

toFixed 方法返回一个以定点表示法表示的数字的字符串形式。该字符串中小数点之前有一位有效数字,而且其后必须包含 fractionDigits 数字。

如果没有 fractionDigits 参数,或者该参数为 undefinedtoFixed 方法假定该值为 0。

二、toFixed可以四舍五入吗?

     答案是可以。但是问题也正在于此。这种四舍五入是不稳定的(不同的浏览器不一样)。

     (1).

 

     在ie7下点击按钮会显示0.00,而ff会是0.01。

    (2) 

     ie和ff都正常。

     可见对于ie而言有一部分数字在使用toFixed时是不能得到正确的四舍五入的结果的。这个问题可能很多朋友都没有意识到,而这个问题说小也小,但有时候却也会带来恶劣的后果。

     就像上面0.009.toFixed(2)这个例子(0.009是一系列处理后的结果),恰好我就遇上了。在一个页面当中因为是在后台代码中做的计算因此显示为1%,而在另一个页面因为使用了toFixed结果显示为0%。为此被客户批了一顿。

     OK,既然有这样的问题,又怎么解决呢?

三、替代方案:

     正如很多朋友所想,我们可以重写这个方法:

     Number.prototype.toFixed = function( fractionDigits )...

     下面给出一个简陋的解决方案:

JS <wbr>Tips(4)鈥斢蓆oFixed带来的潜在问题,您注意到了吗JS <wbr>Tips(4)鈥斢蓆oFixed带来的潜在问题,您注意到了吗Code
Number.prototype.toFixed = functionfractionDigits )
{
    
//没有对fractionDigits做任何处理,假设它是合法输入
    return (parseInt(this * Math.pow( 10fractionDigits  + 0.5)/Math.pow(10,fractionDigts)).toString();
}

覆写toFixed后的显示例子如下:

JS <wbr>Tips(4)鈥斢蓆oFixed带来的潜在问题,您注意到了吗JS <wbr>Tips(4)鈥斢蓆oFixed带来的潜在问题,您注意到了吗Code
<html>
<head>
<script type="text/javascript">
Number.prototype.toFixed 
= function(s)
{
    
return (parseInt(this * Math.pow( 10+ 0.5)/ Math.pow( 10)).toString();
}
</script>
</head>
<body>
<input onclick="alert(0.009.toFixed(2))" type="button" value="显示0.009.toFixed(2)"> 
</body>
</html>

 

OK,问题解决了。

相关文章推荐

bash的基础用法,你注意到了吗?

${parameter##word}               The word is expanded to produce a pattern just as i...

淘宝网店装修,这些细节你注意到了吗?

虽然我们常说,店铺装修要有自己的风格特点,但是也不能太标新立异,脱离了主流。当下活跃在淘宝的多是年轻人,所以绚丽的元素肯定是会多一些,这样产生的视觉效果很好,但是我们在装修时也不能只顾着色彩的搭配这个...

单实例,多实例!框架中你们注意到这个问题了吗?

Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而...

Android开发实现HttpClient工具类(强,处理了很多你没有注意到的细节问题)

Android开发实现HttpClient工具类 在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClien...

Web 应用开发时应该注意到的安全问题

Web 应用开发时应该注意到的安全问题 转载:http://www.huoger.com/help/cons.asp?id=82 由于网站被黑的情况较多,以下总结网站应用方面需要注...

在VC++6.0中调通官网上opencv和MFC完美结合的经典例程需要注意到几点问题

原文链接:http://www.cnblogs.com/mlv5/archive/2011/02/25/1964355.html OpenCV中文网上的《在MFC中使用OpenCV》堪称是Ope...

在VC++6.0中调通官网上opencv和MFC完美结合的经典例程需要注意到几点问题

在VC++6.0中调通官网上opencv和MFC完美结合的经典例程需要注意到几点问题 OpenCV中文网上的《在MFC中使用OpenCV》堪称是OpenCV应用在Windows图形界面的范例,稍作...
  • zdzh1
  • zdzh1
  • 2013-08-19 16:48
  • 864

Java知识,你get到了吗

什么是Java Java是一种开发语言(核心特点:跨平台,面向对象,名称由来看这里:J2EE里面的2是什么意思),对于开发者来讲,Java基本等于Jdk。 Jdk的版本介绍看这里:Ja...

乔布斯给我遗留下的灵感!你想到了吗?

2011年10月5日,大家知道这个是什么日子吗?       相信各位都猜到了吧,在这个光辉时刻,一颗闪亮的流星划过寂静的夜空,夜空由此而变得热闹起来,乔布斯离开了我们,我们失去了乔布斯,更失去了...

UESTC 58 任意阶矩阵的乘法 虽然简单但优化还是要思考一下的 而且也使自己意识到了原来没有注意的问题

虽然简单但优化还是要思考一下的 , 而且也使自己意识到了原来没有注意的问题。 1、memset(,,);还是比较耗时间的,特别是数组河大的时候; 2、有些不用置零的数字就不要总是置零了;
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)