jquery的toFixed方法的正确使用

以下内容转载地址:http://www.cnblogs.com/zengguowang/p/5981626.html

最近一段时候公司的项目中遇到这么个事情,需要计算手续费,而这个手续费必须是保留小数点后面两位,且是由小数点后面第三位四舍五入,就这么个场景:

说说我计算的过程,下面是前两个数是测试用的:

howMuch = 119;

allow_sum = 116;

interest = 0.005;//这是利率

计算出来的是(119-116)*0.005 = 0.015,按照业务要求四舍五入保留小数点后2位,结果应该是0.02

1.一开始直接使用的toFixed方法计算的手续费:

  计算方式:value = (((howMuch-allow_sum)*interest*100)/100).toFixed(2);

  计算结果:0.01

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

2.发现问题后我就换了一种方法[Math.round()],这种方法避免了上面的问题:

  计算方式:value = Math.round((howMuch-allow_sum)*interest*100)/100;

  计算结果:0.02

  虽然避免了上面的问题,在特定的情况下有引发了新的问题,比如:

    howMuch = 119;

    allow_sum = 100;

    计算方式:value = Math.round((howMuch-allow_sum)*interest*100)/100;

    计算结果:计算出来的是(119-100)*0.005 = 0.095,四舍五入就变成了0.1了,而业务需求是小数点后面两位,也就是0.10

3.发现上一个问题后,我决定把两个方法结合起来使用:

  计算方式:value = (Math.round((howMuch-allow_sum)*interest*100)/100).toFixed(2);

  计算结果:计算出来的是(119-100)*0.005 = 0.095,四舍五入后是0.10,刚好符合业务的要求

 

写的不对的地方,欢迎留言指正,谢谢!

简单、坚定
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值