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;
}
相关推荐
-
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
随机推荐
- 详解AngularJS中的作用域
- 如何设计一个秒杀系统
- js checkbox(复选框) 使用集锦
- Python实现根据指定端口探测服务器/模块部署的方法
- C#内置队列类Queue用法实例
- AJAX入门之XMLHttpRequest慨述
- node.js学习之事件模块Events的使用示例
- 使用ODBC数据库管理Serv-U的FTP用户及相关ASP编程[附源码示例下载]
- 统计每个数的重复次数,并按照重复次数由高到低排序的批处理
- jquery 删除字符串最后一个字符的方法解析
- 经典的间隔时间滚动新闻(图片),可控制滚动
- JavaScript CSS修改学习第六章 拖拽
- js单独获取一个checkbox看其是否被选中
- Android 自定义dialog的实现代码
- Spring Boot启动过程(五)之Springboot内嵌Tomcat对象的start教程详解
- 详解Linux系统配置nginx的负载均衡
- 详解Java线程编程中的volatile关键字的作用
- Protocol Buffer技术深入理解(C++实例)
- C# Form自定义光标的简单实现
- Python学生成绩管理系统简洁版