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表格插件datatables用法总结
Sep 05 Javascript
Jquery 实现table样式的设定
Jan 28 Javascript
jQuery表单美化插件jqTransform使用详解
Apr 12 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
JS实现图片剪裁并预览效果
Aug 12 Javascript
微信小程序 使用canvas制作K线实例详解
Jan 12 Javascript
js模拟支付宝密码输入框
Apr 11 Javascript
node.js操作mongodb简单示例分享
May 25 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 Javascript
微信小程序身份证验证方法实现详解
Jun 28 Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 Javascript
JavaScript实现字符串与HTML格式相互转换
Mar 17 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
第三节--定义一个类
2006/11/16 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
使用jquery解析XML的方法
2014/09/05 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python使用递归的方式建立二叉树
2019/07/03 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
使用Python实现牛顿法求极值
2020/02/10 Python
Django choices下拉列表绑定实例
2020/03/13 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
python tqdm库的使用
2020/11/30 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
美国零售商店:Blue&Cream
2017/04/07 全球购物
校本课程教学计划
2015/01/19 职场文书
档案接收函格式
2015/01/30 职场文书
材料员岗位职责范本
2015/04/11 职场文书
校园安全教育心得体会
2016/01/15 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL