`
jslfl
  • 浏览: 329567 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

toFixed 方法潜在问题

    博客分类:
  • web
阅读更多
引用此文做记录http://www.cnblogs.com/MythYsJh/archive/2009/02/13/1389843.html

我相信大家在写脚本处理数字的时候肯定会经常用到toFixed方法。
     一、toFixed能做什么?
以下是摘自网络的toFixed的介绍:
toFixed 方法:
返回一个字符串,代表一个以定点表示法表示的数字。
numObj.toFixed([fractionDigits])
参数
numObj
必选项。一个 Number 对象。
fractionDigits
可选项。小数点后的数字位数。其值必须在 0 – 20 之间,包括 0 和 20。
说明
toFixed 方法返回一个以定点表示法表示的数字的字符串形式。该字符串中小数点之前有一位有效数字,而且其后必须包含 fractionDigits 数字。
如果没有 fractionDigits 参数,或者该参数为 undefined,toFixed 方法假定该值为 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 )...
     下面给出一个简陋的解决方案:

Number.prototype.toFixed = function( fractionDigits )
{
    //没有对fractionDigits做任何处理,假设它是合法输入
    return (parseInt(this * Math.pow( 10, fractionDigits  ) + 0.5)/Math.pow(10,fractionDigts)).toString();
}
覆写toFixed后的显示例子如下:

<html>
<head>
<script type="text/javascript">
Number.prototype.toFixed = function(s)
{
    return (parseInt(this * Math.pow( 10, s ) + 0.5)/ Math.pow( 10, s )).toString();
}
</script>
</head>
<body>
<input onclick="alert(0.009.toFixed(2))" type="button" value="显示0.009.toFixed(2)">
</body>
</html>

OK,问题解决了。
分享到:
评论

相关推荐

    javascript中toFixed()四舍五入使用方法详解

    JavaScript中的`toFixed()`方法是用来将数字转换为字符串,并在小数点后保留指定的位数。这个方法在处理金额计算时特别有用,因为通常需要确保数值的精度。然而,`toFixed()`并不总是按照我们期望的方式进行四舍五入...

    Javascript 浮点运算的问题分析与解决方法

    JavaScript中的浮点运算问题主要源于数字类型(Number)的表示方式,这是由IEEE-754标准决定的。在计算机科学中,浮点数并非总是精确的...通过这样的方法,我们可以有效地规避由于二进制浮点表示不精确而引发的潜在问题。

    JavaScript中判断为整数的多种方式及保留两位小数的方法

    在JavaScript中,判断一个数值是否为整数有多种方法,每种方法都有其适用场景和潜在的局限性。以下是对这些方法的详细说明: 1. **使用取余运算符判断** 这是最基础的判断整数的方式,通过检查数值对1取余的结果...

    JavaScript暂停和继续定时器的实现方法

    此外,为了确保代码的正常运行,避免内存泄漏或其他潜在问题,需要在适当的时候清除定时器(例如,页面关闭或不被需要的时候),因为创建的定时器实例在浏览器中是持续存在的,如果不进行清理,即使页面已经关闭,...

    货币人性化

    在处理货币数据时,TypeScript的强类型系统可以帮助开发者避免因类型错误导致的潜在问题,提高代码的可靠性和安全性。 要实现货币的人性化,我们可以创建一个专门的函数或类,该函数或类接收货币值(通常是数字)...

    JavaScript 有用的代码片段和 trick

    - 方法三: `Math.random().toFixed(6).slice(-6)` - 方法四: `'' + Math.floor(Math.random() * 999999)` 3. **16进制颜色代码生成**: - 可以使用函数 `(function() {return '#'+('00000'+(Math.random()*0x...

    84

    可以使用toFixed()来保留小数位数,如`84.toFixed(2)`将得到"84.00"。 七、数字比较 JavaScript中的比较运算符(&gt;、&lt;、==、!=等)可用于数字比较。例如,`if (num &gt; 84) {...}`可以判断一个变量是否大于84。 八、...

    js实现滑动进度条效果

    值得注意的是,在上述代码示例中,使用了一些JavaScript的方法如:`toFixed`来保留小数点后四位数字并转换成字符串,`parseInt`来转换字符串为整数,以及一些简单的条件判断和字符串操作等,这些技术点都是实现滑动...

    TypeScript中文入门指南详解案例教程

    TypeScript 提供的静态类型检查能够帮助开发者在编码阶段发现潜在的错误,从而提高代码质量和开发效率。此外,TypeScript 对于团队协作非常友好,因为它允许团队成员在项目早期阶段就捕捉到潜在的错误。 TypeScript...

Global site tag (gtag.js) - Google Analytics