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 相关文章推荐
js 获取class的元素的方法 以及创建方法getElementsByClassName
Mar 11 Javascript
javascript基础之查找元素的详细介绍(访问节点)
Jul 05 Javascript
网页中可关闭的漂浮窗口实现可自行调节
Aug 20 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
Sep 25 Javascript
Javascript中的数据类型之旅
Oct 18 Javascript
javascript 继承学习心得总结
Mar 17 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
Jun 06 Javascript
jQuery自定义数值抽奖活动代码
Jun 11 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
详解node服务器中打开html文件的两种方法
Sep 18 Javascript
JS使用for in有序获取对象数据
May 19 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实现ODBC数据分页显示一例
2006/10/09 PHP
PHP之变量、常量学习笔记
2008/03/27 PHP
php 进度条实现代码
2009/03/10 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
详解python中asyncio模块
2018/03/03 Python
详解Python3注释知识点
2019/02/19 Python
python实现控制COM口的示例
2019/07/03 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
问卷调查计划书
2014/01/10 职场文书
中学教师请假制度
2014/02/03 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android