javascript - 关于.toFixed()的重写
大家讲道理
大家讲道理 2017-04-11 11:52:07
[JavaScript讨论组]

最近发现JS当中toFixed()方法存在一些问题。
采用toFixed()方法时,规则并不是标准的“四舍五入”。
而且不同的浏览器会有不同的结果,所以为了满足正确的运算,需要对toFixed重写。
在浏览了各大论坛后,有这么一种比较简单的方法:

原理就不解释了,来不及了。
这个方法在正数情况下是可行的,但是对于负数还是会有偏差。
例如:document.write((-0.050).toFixed(2));
在Chrome下会输出为-0.04;
我觉得问题出现在+0.5那里,但是不知道咋改。
请大神指点一二。
另外,如果有更好的办法,还请不吝赐教,谢谢。

想了下……貌似这样可以的:

Number.prototype.toFixed = function (exponent) { 
    if(this>0){
        return parseInt(this * Math.pow(10, exponent) + 0.5) / Math.pow(10, exponent); 
    }else{
        return parseInt(this * Math.pow(10, exponent) - 0.5) / Math.pow(10, exponent); 
    }   
}

那么……还有更好的办法嘛?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
伊谢尔伦

刚试了一下,我之前用的toFixed也有这个问题。。。

不过如果只对负数有问题的话,在开头检查一下是否是负数,如果是负数的话,就转换成正数处理,最后在结果前面加个-不就好了?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号