<javascript>Number.prototype.toFixed小记
来源:互联网 发布:招聘程序员的网站 编辑:程序博客网 时间:2024/05/22 03:40
Number.prototype.toFixed小记
说明:toFixed经常被用来四舍五入,但这不是一个好方法.
复现问题
解决方案
很明显这个是因为浮点的问题造成的(计算机准确的保存浮点)下面有老外的解决方案:
Number.prototype.round = function(digits) { digits = Math.floor(digits); if (isNaN(digits) || digits === 0) { return Math.round(this); } if (digits < 0 || digits > 16) { throw 'RangeError: Number.round() digits argument must be between 0 and 16'; } var multiplicator = Math.pow(10, digits); return Math.round(this * multiplicator) / multiplicator;}Number.prototype.fixed = function(digits) { digits = Math.floor(digits); if (isNaN(digits) || digits === 0) { return Math.round(this).toString(); } var parts = this.round(digits).toString().split('.'); var fraction = parts.length === 1 ? '' : parts[1]; if (digits > fraction.length) { fraction += new Array(digits - fraction.length + 1).join('0'); } return parts[0] + '.' + fraction;}
//0.7875.fixed(3) /*0.788*/
过程
toFixed方法看不到源码,那么我们就去他的产生地吧,ECMAScript标准,这个就是javascript,我们的toFixed就是在这定义的,在google这个协议后,我们截下一部分相关的描述信息
翻译一下
这里的翻译是针对第8条的,其整个原理并不涉及四舍五入,也就是说,toFixed的方法并不是用来四舍五入的,那为什么firefox下面会出现问题?
好吧,那么我们再追踪下源码看下吧,下载firefox某一个版本的源码.............这里折腾了半天,找到了一个相关的文件jsnum.cpp,jsnum.h文件
ToInteger方法在jsnum.h里面定义的,虽然没有编译,但是能够清晰的看到,toFixed方法在这个函数里面是被强制转换double了,这样能不有精度问题么?而ECMA上面的实现并非如此,至于IE,表示并不知道怎么实现的.
以上存心个人瞎编欢迎批评指正.
0 0
- <javascript>Number.prototype.toFixed小记
- javascript NUMBER toFixed()函数
- JavaScript Number对象的toFixed() 方法
- JavaScript原型(prototype)小记
- JavaScript prototype, 扩充Number对象
- Number.toFixed() 函数详解
- JavaScript toFixed() 方法
- JavaScript toFixed() 方法
- JavaScript toFixed() 方法
- JavaScript toFixed() parseFloat() 函数
- JavaScript小数四舍五入toFixed
- JavaScript toFixed() 方法
- JavaScript toFixed(num) 函数
- JavaScript toFixed() 方法
- JavaScript toFixed() 方法
- JavaScript toFixed() 方法
- JavaScript toFixed() 方法
- Javascript -- toFixed()函数
- 017-docker容器绑定端口时,-p与-P的区别
- 正态分布随机数的产生
- docker自定义网桥
- 彻底理解thunk函数与co框架
- 唐诗生成器
- <javascript>Number.prototype.toFixed小记
- Python<字典>
- Git查看、删除、重命名远程分支
- Java垃圾收集机制
- Spell It Right
- Spark源码的编译过程详细解读(各版本)(博主推荐)
- 人脸姿态估计
- 获取本机文件scp地址小技巧
- 龙果学院