Javascript中 toFixed四舍六入方法


Posted in Javascript onAugust 21, 2017

javascript中toFixed使用的是银行家舍入规则。

银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。

简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。但是不论引入toFixed解决浮点数计算精度缺失的问题也好,它有没有使用银行家舍入法也罢,都是为了解决精度的问题,但是又离不开二进制浮点数的环境,但至少他帮助我们找到了问题所在,从而让我们有解决方法。

Number.prototype.toFixed = function(length)
    {
      var carry = 0; //存放进位标志
      var num,multiple; //num为原浮点数放大multiple倍后的数,multiple为10的length次方
      var str = this + ''; //将调用该方法的数字转为字符串
      var dot = str.indexOf("."); //找到小数点的位置
      if(str.substr(dot+length+1,1)>=5) carry=1; //找到要进行舍入的数的位置,手动判断是否大于等于5,满足条件进位标志置为1
      multiple = Math.pow(10,length); //设置浮点数要扩大的倍数
      num = Math.floor(this * multiple) + carry; //去掉舍入位后的所有数,然后加上我们的手动进位数
      var result = num/multiple + ''; //将进位后的整数再缩小为原浮点数
      /*
      * 处理进位后无小数
      */
      dot = result.indexOf(".");
      if(dot < 0){
        result += '.';
        dot = result.indexOf(".");
      }
      /*
      * 处理多次进位
      */
      var len = result.length - (dot+1);
      if(len < length){
        for(var i = 0; i < length - len; i++){
          result += 0;
        }
      }
      return result;
    }

该方法的大致思路是首先找到舍入位,判断该位置是否大于等于5,条件成立手动进一位,然后通过参数大小将原浮点数放大10的参数指数倍,然后再将包括舍入位后的位数利用floor全部去掉,根据我们之前的手动进位来确定是否进位。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery替换已存在于element上的event的方法
Mar 09 Javascript
基于jQuery的前端数据通用验证库
Aug 08 Javascript
jQuery获取浏览器中的分辨率实现代码
Apr 23 Javascript
js格式化货币数据实现代码
Sep 04 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
Mar 23 Javascript
利用Jquery队列实现根据输入数量显示的动画
Sep 01 Javascript
Vue.js对象转换实例
Jun 07 Javascript
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 Javascript
Express之托管静态文件的方法
Jun 01 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 Javascript
原生js实现日期选择插件
May 21 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 #Javascript
JavaScript创建对象的七种方式全面总结
Aug 21 #Javascript
webpack处理 css\less\sass 样式的方法
Aug 21 #Javascript
Vue中建立全局引用或者全局命令的方法
Aug 21 #Javascript
JS实现身份证输入框的输入效果
Aug 21 #Javascript
Vue自定义指令使用方法详解
Aug 21 #Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 #Javascript
You might like
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
JS控制表格隔行变色
2006/06/26 Javascript
slice函数的用法 之不错的应用
2006/12/29 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
js实现旋转木马效果
2017/03/17 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
一个入门级python爬虫教程详解
2021/01/27 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
为什么要有struct关键字
2012/05/08 面试题
求职自荐书范文
2013/12/04 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
公民授权委托书范本
2014/09/17 职场文书
公务员政审材料范文
2014/12/23 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
浅析JavaScript中的变量提升
2022/06/01 Javascript