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

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

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

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

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

基础方法:

//乘法函数
function accMul(arg1, arg2) {  var m = 0, s1 = arg1.toString(), s2 = arg2.toString();  try {  m += s1.split(".")[1].length;  }  catch (e) {  }  try {  m += s2.split(".")[1].length;  }  catch (e) {  }  return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}   //给Number类型增加一个mul方法,使用时直接用 .mul 即可完成计算。
Number.prototype.mul = function (arg) {  return accMul(arg, this);
};   //除法函数
function accDiv(arg1, arg2) {  var t1 = 0, t2 = 0, r1, r2;  try {  t1 = arg1.toString().split(".")[1].length;  }  catch (e) {  }  try {  t2 = arg2.toString().split(".")[1].length;  }  catch (e) {  }  with (Math) {  r1 = Number(arg1.toString().replace(".", ""));  r2 = Number(arg2.toString().replace(".", ""));  return (r1 / r2) * pow(10, 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( 10, s ) + 0.5)).div(Math.pow( 10, s ))).toString(); index=changenum.indexOf("."); if(index<0&&s>0){ changenum=changenum+"."; for(i=0;i<s;i++){ changenum=changenum+"0"; } }else { index=changenum.length-index; for(i=0;i<(s-index)+1;i++){ changenum=changenum+"0"; } } return changenum;
}

JS toFixed 四舍六入五成双相关推荐

  1. js版四舍六入五成双方法

    规则: 四舍六入五考虑, 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一. function evenRound(num, decimalPlaces) { var d = de ...

  2. 四舍六入五成双方法-js版

    四舍六入五成双方法-js版 // 规则: // 四舍六入五考虑,五后非零就进一,五后皆零看奇偶, 五前为偶应舍去, // 五前为奇要进一. function round_sslr(num, decim ...

  3. 重写 toFixed 方法,解决 四舍六入五成双 的问题

    // 重写 toFixed 方法,解决 四舍六入五成双 的问题 Number.prototype.toFixed=function (d) { var s=this+""; if( ...

  4. java 四舍六入五成双_【数据小常识】“四舍六入五成双”

    "四舍六入五成双"规则如下: "四舍六入五成双",也即"4舍6入5凑偶",这里"四"是指≤4 时舍去,"六&q ...

  5. 银行家舍入-四舍六入五成双

    在js的计算中: 一个例子,比如说一件商品,它的含税单价是450,税率是3%,那么我们将它转为不含税单价.450/1.03=436.8932038834951 结果是17位,共13位小数.当然实际上, ...

  6. “银行家算法”讲解,在前端表格中利用自定义公式实现“四舍六入五成双”

    银行的盈利模式是什么?三个字:信息差!从储户手中收拢资金,然后放贷出去,而所谓的"利润"就是这其中的利息差额. 在我国,人民银行规定每个季度月末的20号为银行结息日,每一年四次结息 ...

  7. 四舍五入 与 四舍六入五成双

    今天公司有个同事在调一个asp程序时候,发现 round(1.25,1) 返回的竟然是1.2 而不是1.3 查询了一下CSDN的帖子,发现这竟然是一个Bug: http://search.csdn.n ...

  8. c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    复制内容到剪贴板 代码:#include using namespace std; #define FLENGTH 1000;        //宏定义保留3位小数 double fun(double ...

  9. sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...

    做过统计都知道关于保留几位小数有好几种方法,其中4舍6入5凑偶用的比较多,所以我就是sqlserver里面实现了一个自定义函数 定义 对于位数很多的近似数,当位数确定后,其后面多余的数字应该舍去,只保 ...

最新文章

  1. vcenter converter 转换xenserver下linux的错误
  2. ADO.NET并发性
  3. PYTHON之路(四)
  4. 减少运维工作量,如何通过 ROS 轻松实现资源编排新方式
  5. python database is locked_sqlite遇到database is locked问题的完美解决
  6. 【Java报错】Greenplum数据库报错 could not determine data type of parameter $2. 问题解决(踩坑分享)
  7. python适合开发游戏吗_用python能制作游戏吗
  8. API(应用程序接口)是什么
  9. UVA11876 N + NOD (N)【欧拉筛法+前缀和】
  10. 关于level_idc
  11. 自考《离散数学》题型总结
  12. 财富智慧 幸福人生——《菁英财商训练营》首场活动在深圳龙岗文博宫举行
  13. Html导出到Word带页眉页脚
  14. java 用户留存率_Java后台实现日留存率,求解!
  15. (poj 2377)Kruskal算法 最大生成树
  16. 做一个商业网站需要准备什么,需要多少钱?
  17. 微信支付 Verify the signature and get the Wechatpay certificate corresponding to serialnumber[X] is empt
  18. 回顾 Firefox 历史
  19. axis2 默认端口_axis2 webservice 问题,高手进,急!!!!!!!!!!!!!!!!!!!!!
  20. 电子信息工程班徽设计_青春日职 | 电子信息工程学院成功举办“心系我班,熠熠生徽”班徽设计大赛...

热门文章

  1. jquery 的$.ajax() 与php后台交互
  2. 华硕释ShadowHammer恶意程序侦测工具却被微软误判
  3. Windows逆向学习笔记——Source Insight 4 注册机制研究
  4. pythonn阶杨辉三角_Python实现杨辉三角
  5. 二重积分转换成极坐标_极坐标变换计算二重积分中积分限转换的一种简单方法...
  6. 易用性测试及GUI常见的测试要求
  7. MacOS搭建esp32开发环境排坑记
  8. numpy中的省略号(...)和冒号(:)
  9. Java 常见异常类型及其原因分析
  10. 深入浅出谈谈IP协议