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

但凡用过js 中的toFix() 方法的, 应该都知道这个方法存在一个小小的BUG。
在IE 下和FF 下对于小数的进位有点不同。
例如( 0.005)在ie 下 toFix(2)=0.00. 在FF 下 toFix(2)=0.01.
这样就会造成数据的差异。
我们可以通过 重写 这个方法来实现精度的统一。


代码如下:

Number.prototype.toFixed = function(s)
{
return (parseInt(this * Math.pow( 10, s ) + 0.5)/ Math.pow( 10, s )).toString();
}

但是这样做仍然有一个问题, 在所有的浏览器下, String("0.050").toFix(2)=0.1
我们可以看到这样你原本要保留两位小数却变成了一位。 也就是说。这个重写只有的toFixed() 会自动舍弃最后的0.
我们需要对这个方法做进一步的处理。


代码如下:

Number.prototype.toFixed = function(s)
{
changenum=(parseInt(this * Math.pow( 10, s ) + 0.5)/ Math.pow( 10, s )).toString();
index=changenum.indexOf(".");
if(index<0&&s>0){
changenum=changenum+".";
for(i=0;i<s;i++){
changenum=changenum+"0";
}

}else {
index=changenum.length-index;
for(i=0;i<(s-index)+1;i++){
changenum=changenum+"0";
}

}

return changenum;
}

(0)

相关推荐

  • Javascript中 toFixed四舍六入方法

    javascript中toFixed使用的是银行家舍入规则. 银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法. 简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一.但是不论引入toFixed解决浮点数计算精度缺失的问题也好,它有没有使用银行家舍入法也罢,都是为了解决精度的问题,但是又离不开二进制浮点数的环境,但至少他帮助我们找到了问题所在,从而让我们有解决方法. Number.prototype.toFixed = fu

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

    前言 在公司项目中涉及到一个有大量浮点数价格计算的模块,从而引发了我一系列的思考: 计算机二进制环境下浮点数的计算精度缺失问题; console.log(.1+.2); 0.30000000000000004 为了解决上述问题,使用了toFixed方法却出现了浮点数小数位以5结尾的四舍五入错误问题; var num = 0.045; console.log(num.toFixed(2)); 0.04 以此为起点,引发了我关于toFixed的一系列探索,终于找到了一些有用的信息,toFixed使用

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

    定义和用法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 语法 NumberObject.toFixed(num) 参数 描述 num 必需.规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围.如果省略了该参数,将用 0 代替. 返回值 返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字.如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度.如果 num 大于 l

  • JavaScript toFixed() 方法

    定义和用法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 语法 NumberObject.toFixed(num)num 必需.规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围.如果省略了该参数,将用 0 代替. 返回值 返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字.如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度.如果 num 大于 le+21,则该

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

    0.009.toFixed(2)本该返回0.01的结果,可它却返回了一个0.00,这是这个方法的一个BUG,且这个方法对客户端的JS版本要求有点偏高,至少在IE5.0里这个方法用不起来,所以我写了上面的一段修正代码,并且还解决了这个BUG的问题.若是想完全使用这个自定义的方法替代那个有BUG的系统方法的话,只需要去掉最外层的那个 if 判断就可以了. //by meizz if(typeof(Number.prototype.toFixed)!="function") { Number

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

    [code]<script> var a=4.2343; alert(a.toFixed(3)); </script> <script>var a=4.2343;alert(a.toFixed(3));</script>执行结果: toFixed方法将一个数字转换成一个拥有固定小数位数的字符串.

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

    Math.round(x*100)/100,当然我要的是Math.round(x*100),这没有关系.但直接使用Math.round(x*100)存在一个问题,有时会有很小的误差,显示很多位的小数位,如0.9996*100,就会变成99.96000000000001,这不是我想要的. 查找javascript的功能,number类型有一个toFixed()函数,测试: 复制代码 代码如下: alert((0.9996*100).toFixed(2)); 使用Number.toFixed()可以

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

    最近发现JS当中toFixed()方法存在一些问题,采用原生的Number对象的原型对象上的toFixed()方法时,规则并不是所谓的"四舍五入"或者是"四舍六入五成双",所谓"四舍六入五成双",在百度百科上给的解释是:也即"4舍6入5凑偶"这里"四"是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1:当5后无有效数字时,

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

    但凡用过js 中的toFix() 方法的, 应该都知道这个方法存在一个小小的BUG. 在IE 下和FF 下对于小数的进位有点不同. 例如( 0.005)在ie 下 toFix(2)=0.00. 在FF 下 toFix(2)=0.01. 这样就会造成数据的差异. 我们可以通过 重写 这个方法来实现精度的统一. 复制代码 代码如下: Number.prototype.toFixed = function(s) { return (parseInt(this * Math.pow( 10, s ) +

  • JS中toFixed()方法四舍五入的精度问题详解

    目录 踩的坑 填坑方法 什么样的坑? 总结 踩的坑 最近工作中,在计算一个商品的折扣价格,有时候总是出现价格会有一分钱的差异,涉及钱的问题都是比较敏感的,经过排查,最后发现竟然是 JS 原生的 toFixed 方法的问题. 好家伙,这都啥规律啊...(⊙o⊙) 填坑方法 先不着急去探究其中的问题,既然发现了问题,那就先把 Bug 修复了先,原生方法用不了,就自己写一个呗,还不是分分钟的事情,哈哈哈! /** * 保留小数点几位数, 自动补零, 四舍五入 * @param num: 数值 * @p

  • 18个高频使用的JS工具方法总结

    目录 前言 1. 回到顶部 2. 删除数组指定项 3. 获取 url 某一个参数 4. 复制文本 5. 禁止复制文本 6. 复制文本带版权信息 7. 判断数据类型和数据值 8. ua 环境判断 9. 时间格式转换 10. 函数防抖 11. 全屏/退出全屏 12. 禁止打开控制台调试 13. 密码强度展示 14. 五星好评 15. 保留 n 位小数 16. 金额转大写 17. 常用正则判断 18. 解决运算精度丢失的问题 前言 将自己做前端6年以来在项目中使用很高频的工具方法整理了出来,分享一下,

  • 动态加载js的方法汇总

    本文实例汇总了动态加载js的方法.分享给大家供大家参考.具体如下: 方法一:直接document.write(异步) 复制代码 代码如下: <script language="javascript">       document.write("<script src='res/extwidget/echarts/xx.js'><\/script>"); </script> 由于这种方式是异步加载,document.w

  • 基于Require.js使用方法(总结)

    一.为什么要使用require.js 首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长:其次,由于js文件之间存在依赖关系,因此必须严格保证加载顺序,当依赖关系很复杂的时候,代码的编写和维护都会变得困难. require.js,就是为了解决这两个问题: 1. 实现js文件的异步加载,避免网页失去响应: 2. 管理模块之间的依赖性,便于代码的编写和维护. 二.require.js的加载 第一步,去官网下载最新版本,直接放到页面进行加载 <sc

  • jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解

    jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解 1.插件介绍: jquery.json-viewer.js是一款查看json格式数据的jquery插件.它可以将混乱的json数据漂亮的方式展示在页面中,并支持节点的伸展和收缩和语法高亮等功能. 2.代码演示: 1).首先引入jquery和json.viewer.js插件 <script src="http://www.jq22.com/jquery/jquery-1.10.2.js">&l

  • JS数组排序方法实例分析

    本文实例讲述了JS数组排序方法.分享给大家供大家参考,具体如下: 方法一.冒泡排序 思路:依次比较数组中的第一个元素和第二个元素,如果第一个元素大于第二个元素,则交换位置,所以需要两个函数:交换位置函数和比较函数 比较轮数为数组长度 var arr=[2,58,49,26,34]; function change(f,s){ var temp=arr[f]; arr[f]=arr[s]; arr[s]=temp; } for(var i=0;i<arr.length;i++){ for(var

  • 实现图片首尾平滑轮播(JS原生方法—节流)

    首先给出HTML代码,要注意轮播图片表(#list)末尾加上第一个图片1.jpg,在首部加上最后一个图片5.jpg. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首尾轮播</title> <link rel="stylesheet" href="首尾轮播.css&q

随机推荐