`
jslfl
  • 浏览: 321139 次
  • 性别: 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,问题解决了。
分享到:
评论

相关推荐

    js toFixed()方法的重写实现精度的统一

    但凡用过js 中的toFix() 方法的, 应该都... 代码如下: Number.prototype.toFixed = function(s) { return (parseInt(this * Math.pow( 10, s ) + 0.5)/ Math.pow( 10, s )).toString(); } 但是这样做仍然有一个问题,

    JS中toFixed()方法引起的问题如何解决

    这种方法可以避免由于`toFixed()`的不一致行为导致的问题,但请注意,这仅适用于希望去除末尾零的情况,如果需要严格遵循“四舍五入”规则,可能需要更复杂的逻辑。 此外,对于那些需要精确浮点运算的应用,建议...

    Javascript中 toFixed四舍六入方法

    在JavaScript中,`toFixed()`方法是用来处理浮点数精度问题的一个关键工具,它遵循特定的舍入策略,即银行家舍入法。银行家舍入法是一种公平的舍入策略,旨在避免在大量数据处理中偏向某一边的舍入误差积累。在...

    JavaScript toFixed() 方法

    **关于 `toFixed()` 的精度问题** 值得注意的是,`toFixed()` 返回的字符串虽然看起来精确,但在进行数学计算时可能会引入额外的精度误差,因为它会进行字符串拼接而非真正的数学运算。如果需要进行数学运算并保持...

    Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法

    在讨论JavaScript中的toFixed方法时,我们经常会遇到一种情况,即在浮点数运算中由于二进制精度缺失导致计算结果出现不精确的问题。toFixed方法是JavaScript提供的一个字符串方法,用于将数字格式化为保留指定位数的...

    javascript的parseFloat()方法精度问题探讨

    在Javascript中parseFloat()方法会产生精度问题 代码如下: [removed] var a = “0.11”; var b = “0.2801”; var c = “1.002”; var sum1 = parseFloat(a) + parseFloat(b) + parseFloat(c); var sum2 = ...

    JavaScript中Number对象的toFixed() 方法详解

    在JavaScript中,Number对象提供了许多方法来处理数值,其中之一便是`toFixed()`方法。这个方法的主要作用是将一个数字四舍五入到指定的小数位数,并返回一个字符串形式的数值,而不使用科学记数法。这在需要精确...

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

    最近做的项目涉及到金额的计算,有一种方式就是进行四舍五入的规则进行小数点后面的尾数处理,以前一直以为toFixed方法就是四舍五入的,知道一个用户反馈了金额计算的bug我才如梦初醒(亏了一毛钱),才仔细深究了下...

    javascript之对系统的toFixed()方法的修正

    0.009.toFixed(2)本该返回0.01的结果,可它却返回了一个0.00,这是这个方法的一个BUG,且这个方法对客户端的JS版本要求有点偏高,至少在IE5.0里这个方法用不起来,所以我写了上面的一段修正代码,并且还解决了这个...

    javascript 使用toFixed保留两位小数.pdf

    在JavaScript中,`toFixed()`是一个非常实用的方法,用于将数字格式化为字符串,并且保留指定位数的小数。这个方法对于处理需要精确显示小数部分的场景尤其有用,比如金融计算或者数据展示。在给定的标题和描述中,...

    vue 保留两位小数 不能直接用toFixed(2) 的解决

    总的来说,当在Vue中需要保留两位小数时,应避免直接在模板中使用`toFixed(2)`,而是使用自定义过滤器或在`methods`中定义的方法来处理数字,确保数据类型的一致性,从而避免Vue的更新循环问题。同时,根据项目的...

    微信小程序 保留小数(toFixed)详细介绍

    `toFixed()`方法是JavaScript中用于处理这种情况的一个关键工具,同样适用于微信小程序环境。本文将深入探讨`toFixed()`方法以及在微信小程序中使用它的注意事项。 `toFixed()`方法用于将一个数字格式化为带有指定...

    Vue toFixed保留两位小数的3种方式

    定义一个方法 towNumber(val) { return val.toFixed(2) } 使用 {{ towNumber(row.equiValue) }} 补充知识:vue中提示toFixed不是函数 vue中toFixed获取小数点后两位 错误提示: .toFixed is not a function ...

Global site tag (gtag.js) - Google Analytics