zoukankan      html  css  js  c++  java
  • jquery的toFixed方法的正确使用

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

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

    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,刚好符合业务的要求

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

  • 相关阅读:
    火狐插件火狐黑客插件将Firefox变成黑客工具的七个插件
    memcache安装环境:WINDOWS 7
    PHP正则表达式
    968. 监控二叉树 力扣(困难) dfs 官方说DP
    375. 猜数字大小 II 力扣(中等) 区间动态规划、记忆化搜索
    629. K个逆序对数组 力扣(困难) 区间动态规划
    剑指 Offer 51. 数组中的逆序对 力扣(困难) 巧用归并排序算法
    488. 祖玛游戏 力扣(困难) dfs
    16. 最接近的三数之和 力扣(中等) 双指针
    319. 灯泡开关 力扣(中等) 数论
  • 原文地址:https://www.cnblogs.com/zengguowang/p/5981626.html
Copyright © 2011-2022 走看看