以前一直以为toFixed就是四舍五入的方法,后来又有一段时间以为toFixed是五舍六入。今天终于写的时候,终于才知道toFixed是一个叫做四舍六入无成双的诡异的方法。。。

完全不明白为什么要这么写。。。

什么是四舍六入五成双:百度是这么说的:

对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤ 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)

所以也就是说: (0.5251).toFixed() => 0.53   然而 (0.525).toFixed()=>0.52,这并不是我们想用的四舍五入的方法。所以可以这么修改:

基础方法:

//乘法函数
function accMul(arg1, arg2) {   var m = , s1 = arg1.toString(), s2 = arg2.toString();   try {
    m += s1.split(".")[].length;
  } catch (e) { }
  try {
   m += s2.split(".")[].length;
  } catch (e) { }
   return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(, m);
  }
  //给Number类型增加一个mul方法,使用时直接用 .mul 即可完成计算。
Number.prototype.mul = function (arg) {
return accMul(arg, this);
};
//除法函数
function accDiv(arg1, arg2) {
var t1 = , t2 = , r1, r2;
try {
t1 = arg1.toString().split(".")[].length;
} catch (e) { }
try {
t2 = arg2.toString().split(".")[].length;
} catch (e) { }
with (Math) {//关于js中with关键字的使用请查看链接 http://luopq.com/2016/02/14/js-with-keyword/
r1 = Number(arg1.toString().replace(".", ""));
r2 = Number(arg2.toString().replace(".", ""));
return (r1 / r2) * pow(, t2 - t1);
}
} //给Number类型增加一个div方法,使用时直接用 .div 即可完成计算。
Number.prototype.div = function (arg) {
return accDiv(this, arg);
}; toFixed方法: // 修改toFixed方法,由原本的四舍六入五成双,改为四舍五入
Number.prototype.toFixed = function(s) {
changenum=(parseInt(this.mul(Math.pow( , s ) + 0.5)).div(Math.pow( , s ))).toString();
index=changenum.indexOf(".");
if(index<&&s>){ changenum=changenum+".";
for(i=;i<s;i++){
changenum=changenum+"";
}
}else {
index=changenum.length-index;
for(i=;i<(s-index)+;i++){
changenum=changenum+"";
}
}
return changenum;
}
转自:http://www.68idc.cn/help/buildlang/ask/20150411317631.html

JS toFixed 四舍六入五成双的更多相关文章

  1. C#采用的是“四舍六入五成双”、上取整、下取整

    c# 四舍五入.上取整.下取整 Posted on 2010-07-28 12:54 碧水寒潭 阅读(57826) 评论(4) 编辑 收藏 在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采 ...

  2. 四舍六入五成双银行家算法的 PHP和Javascript实现

    四舍六入五成双 http://baike.baidu.com/view/1245064.htm?fr=aladdin 四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则. 对于位数很 ...

  3. (转载) js 单引号替换成双引号,双引号替换成单引号 操作

    引言:刚开始用js遇到不少问题,表示看不懂,为什么替换单引号需要/g,现在知道/g是正则中的匹配全部 原文:http://blog.csdn.net/joyhen/article/details/43 ...

  4. js toFixed() 四舍五入后并不是你期望的结果

    小学的时候学数学就知道有一种叫四舍五入的计算方式,就是对于小数位数的取舍,逢五进一,比如1.225 取两位小数后就是1.23.在前端开发中自己也少不了这样的计算,js也提供了相关的方法--toFixe ...

  5. js toFixed()方法的坑

    javascript中toFixed使用的是银行家舍入规则. 银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法. 简单来说就是:四舍六入五考虑,五后非零就进一,五后为零 ...

  6. js将金额专成每隔3位数加逗号

    js将金额专成每隔3位数加逗号,比如 12345.00 转成 12,345.00; 懒得解释具体代码如下 //分割 String.prototype.joinByNum = function(num, ...

  7. 圣诞节,把网站所有的js代码都压缩成圣诞树吧。

    本文分两章节,分别讲解如何使用js2image这个库生成可以运行的圣诞树代码 和 js2image的原理. github地址:https://github.com/xinyu198736/js2ima ...

  8. 读JS高级——第五章-引用类型 _记录

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 【高德地图API】从零开始学高德JS API(五)路线规划——驾车|公交|步行

    原文:[高德地图API]从零开始学高德JS API(五)路线规划——驾车|公交|步行 先来看两个问题:路线规划与导航有什么区别?步行导航与驾车导航有什么区别? 回答: 1.路线规划,指的是为用户提供3 ...

随机推荐

  1. 上下文管理、线程池、redis订阅和发布

    一:上下文管理: 对于一些对象在使用之后,需要关闭操作的.比如说:socket.mysql数据库连接.文件句柄等. 都可以用上下文来管理. 语法结构: Typical usage: @contextm ...

  2. 类似baidu搜索 修正jquery的autocomplete在firefox下不支持中文输入法的bug

    解决方法:

  3. [读书笔记]Java之动态分派

    以下内容来自周志明的<深入理解Java虚拟机>. 前一篇说了静态分派和重载有关,现在的动态分派就和覆盖Override有关了. 先看代码: public class DynamicDisp ...

  4. Web程序员常见的5个错误及解决方案

    我是那种脾气暴躁的web用户,但我认为正是如此才驱使我成为一名良好的web开发人员.我会对那些会导致使用网站变得困难的事情恼火,我认为事情越简单越方便越好.这里有五个常见的可用性错误,以及如何避免它们 ...

  5. Windows下安装openssl

    安装python类库cryptography1.6提示 build\temp.win-amd64-2.7\Release\_openssl.c(429): fatal error C1083: Can ...

  6. php 获取静态方法调用的类名

    方法一: class foo { static public function test() { var_dump(get_called_class()); } } class bar extends ...

  7. MySQL字符串处理函数的几种常见用法

    1.字符串大小写转化: (1).将tbl_student表的user_name字段所有小写字母,替换为大写: update tbl_student set user_name=UPPER(user_n ...

  8. JUnit报错需导入两个jar包

    <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</a ...

  9. Android的Notification使用注意事项

    看<Android开发-第一行代码>这本书,读到创建系统通知(Notification)的时候,发现若干主要方法均已经过期,于是找了一下官方的开发指南,进入此url:http://deve ...

  10. python built-in zip()

    zip([iterable, ...]) 返回一个list ,list里的元素是元组tuple.第i个元组内的元素是所有iteralbe中第i个元素组成的. 当所有的iterable拥有同样的长度的时 ...