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 相关文章推荐
javascript 建设银行登陆键盘
Jun 10 Javascript
jQuery 学习 几种常用方法
Jun 11 Javascript
JS正则中的RegExp对象对象
Nov 07 Javascript
js左右弹性滚动对联广告代码分享
Feb 19 Javascript
JavaScript中的数值范围介绍
Dec 29 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
Feb 14 Javascript
js 求时间差的实现代码
Apr 26 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
Aug 05 Javascript
bootstrap多层模态框滚动条消失的问题
Jul 21 Javascript
cocos2dx+lua实现橡皮擦功能
Dec 20 Javascript
JS实现深度优先搜索求解两点间最短路径
Jan 17 Javascript
node 文件上传接口的转发的实现
Sep 23 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 字符串 小常识
2009/06/05 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
json 定义
2008/06/10 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
python中get和post有什么区别
2020/06/19 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
UNIX文件类型
2013/08/29 面试题
民族团结好少年事迹材料
2014/08/19 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
Python字符串的转义字符
2022/04/07 Python