`

js处理小数 , toFixed()的潜在问题

阅读更多
一、toFixed能做什么?

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

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

numObj.toFixed([fractionDigits])

参数
numObj
必选项。一个 Number 对象。

fractionDigits

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

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

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

二、toFixed可以四舍五入吗?

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

     (1).
<input onclick="alert(0.009.toFixed(2))" type="button" value="显示0.009.toFixed(2)">


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

    (2)
<input onclick="alert(0.097.toFixed(2))" type="button" value="显示0.097.toFixed(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保留两位小数.pdf

    总结来说,`toFixed()`是JavaScript中处理数字格式化和保留小数位数的关键工具,特别是当需要将数字转换为具有固定小数位数的字符串时。不过,使用时要注意它返回的是字符串类型,如果需要进行数学运算,记得先将其...

    js保留两位小数使用toFixed实现

    在JavaScript中,处理小数精度问题是一个常见的挑战。在标题提到的"js保留两位小数使用toFixed实现"中,我们探讨的是如何精确地将一个数保留到两位小数。通常,开发者可能会首先想到使用`Math.round()`函数来四舍五...

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

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

    JS精度计算1、转成整数计算再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

    JavaScript在处理浮点数精度问题时常常会遇到挑战,因为其内部表示机制可能导致不精确的结果。为了解决这个问题,有几种不同的策略和技术可以使用。以下是对标题和描述中提到的知识点的详细解释: 1. **转成整数...

    javascript中的toFixed固定小数位数 简单实例分享

    在JavaScript中,`toFixed()`是一个非常实用的内置函数,它用于将数字转换为字符串,并保留指定位数的小数。这个方法对于处理财务计算、显示精确数值或者格式化输出时非常有用。下面我们将深入探讨`toFixed()`的工作...

    js中小数运算(加、减、乘、除)的问题及一些数学函

    JS 中小数运算(加、减、乘、除)的问题是指在JavaScript中对小数进行加、减、乘、除运算时可能遇到的精度问题。这种问题的产生是由于计算机对浮点数的存储方式和精度的限制。浮点数在计算机中是以二进制形式存储的...

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

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

    js保留两位小数

    ### JavaScript保留两位小数的方法详解 在日常的前端开发工作中,我们经常需要处理数值运算,尤其是在涉及财务计算或展示精确度较高的数据时,对数值进行格式化处理是必不可少的一个环节。其中,一个常见的需求就是...

    js计算精度问题解决方案

    在JavaScript编程语言中,计算精度问题是一个...如果压缩包中的"js-float-accuracy-master"库提供了实用的解决方案,那么它可能包含了一些优化的算法或工具,以帮助开发者更好地处理JavaScript中的浮点数计算精度问题。

    解决JS浮点数(小数)计算加减乘除的BUG

    2. **使用库**:有些库如`decimal.js`或`big.js`专门用于处理高精度浮点数计算,它们可以避免JavaScript内置的浮点数精度问题。 3. **整数运算**:对于涉及金钱计算等需要精确结果的场景,可以考虑将数值转换为整数...

    javascript解决小数的加减乘除精度丢失的方案

    在JavaScript开发中,处理小数加减乘除运算时经常会遇到精度丢失的问题。由于JavaScript中的数字是以IEEE 754标准的双精度64位浮点数来表示的,这就意味着它可以精确地表示的整数范围大约在-***到***之间。当超出这...

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

    在JavaScript中,`toFixed()`方法用于将数字转换为字符串,并保留指定位数的小数。然而,它并不完全遵循我们通常理解的“四舍五入”规则,这可能会导致一些意外的结果。`toFixed()`方法实际上是按照银行家舍入法...

    JavaScript小数点精确计算

    由于JavaScript内部使用的是IEEE 754标准来存储和处理浮点数,这可能导致在进行小数运算时出现精度丢失问题,尤其是在涉及大数字或者循环计算时。本篇将深入探讨这个问题,并提供一些解决方案。 首先,我们来理解...

    JS获取控件小数

    以上介绍了两种在JavaScript中处理控件中小数的方法,分别是使用内置的`toFixed()`函数和手动控制精度的方法。两种方法各有优缺点,可以根据实际需求灵活选择使用。需要注意的是,在处理数值运算时应充分考虑精度...

    JavaScript toFixed() 方法

    `toFixed()` 是 JavaScript 中的一个内置方法,主要用于处理数字的四舍五入,并将结果转换成字符串格式。这个方法广泛应用于需要精确控制小数位数的场景,比如金融计算或者数据展示。 **方法定义与用法** `toFixed...

    js小数运算出现多位小数如何解决

    总结来说,在JavaScript中处理小数运算时,要注意浮点数运算的精度问题,通过多种方法确保计算的准确性。其中,toFixed()方法虽然简单,但可能不够精确;转换成整数进行计算则可以确保精度,但可能会影响性能;...

    C#.NET,JAVASCRIPT数字进行四舍五入保留两位小数

    而在JavaScript中,`toFixed`会正确处理负数的小数部分。 总的来说,C#.NET和JavaScript都提供了方便的函数来实现数字的四舍五入,并且都能轻松地保留两位小数。理解这些基本操作对于日常编程工作至关重要,特别是...

Global site tag (gtag.js) - Google Analytics