码迷,mamicode.com
首页 > Web开发 > 详细

js中Number.toFixed()方法的理解

时间:2018-04-03 17:29:01      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:substr   浮点   split   log   ++   存储   str   参考   var   

需求:对浮点数进行四舍五入精度获取。

问题:直接使用Number.toFixed()会出现异常的舍入情况。

原因:计算机浮点数存储是二进制,js的Number.toFixed()实际的精度确认规则是四舍六入五成双,逢四下舍,逢六入一,逢五时,根据浏览器内核计算结果也不尽相同。

   具体原理这里不做详细描述,各位看官可自行查阅相关资料。

解决方法:重新Number.toFixed()方法。

实现原理:将浮点数转化为整数,保留所需位数,再转为浮点数。

实现代码:

 1 Number.prototype.toFixed = function (length) {
 2     var s = this + ‘‘;
 3     var len = length || 0;
 4     var result = s;
 5     var arr = s.split(‘.‘);
 6 
 7     //整数
 8     if (arr.length < 2) {
 9         if (len > 0) {
10             result += ‘.‘;
11             for (var i = 1; i <= len; i++) {
12                 result += ‘0‘;
13             }
14         }
15         return result;
16     }
17 
18     //小数
19     var first = arr[0];
20     var second = arr[1];
21 
22     //小数点位数等于length
23     if (second.length == len) {
24         return result;
25     }
26 
27     //小数点位数小于length
28     if (second.length < len) {
29         for (var k = 1; k <= len - second.length; k++) {
30             result += ‘0‘;
31         }
32         return result;
33     }
34 
35     //小数点位数大于length
36     result = first + second.substr(0, len + 1);
37     var last = Math.floor((result * 1 + 5) / 10);
38     result = (last / Math.pow(10, len)).toFixed(len);
39     return result;
40 };

备注:解决方案有很多种,这只是个人的理解,仅供参考。

js中Number.toFixed()方法的理解

标签:substr   浮点   split   log   ++   存储   str   参考   var   

原文地址:https://www.cnblogs.com/ygjoe/p/8708820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!