取小数点后两位:打造一个自己的toFixed

0. 起因

toFixed用的银行家算法

四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一

1. 封装的toFixedNumber

    toFixedNumber(num, point) {
      let str = (num + "").split(""),
        count = 0;
      let numArr = str.reduce((prev, cur) => {
        if (count < point + 1) {
          prev.push(cur);
          if (prev.includes(".")) {
            count++;
          }
        } else {
          if (count >= 5) {
            prev.push(prev.pop() >= 5 ? prev.pop() + 1 : prev.pop());
          }
        }
        return prev;
      }, []);
      return numArr.join("");
    },

2. 使用与注意

          if (key.sum === null) {
            key.sum = 0;
          } else {
            key.sum = this.toFixedNumber(key.sum, 2);
          }
  1. sum: 386.28000000000003 => 386.28

3. Math.round

Math.round是js内置的取四舍五入的方法,传入的可以是数字或者字符串
MDN手册

React中的状态提升

参考

toFixed的坑 - 收破烂的小伙子 - 博客园 (cnblogs.com)

toFixed()和Math.round(),浮点数的精确运算 - 简书 (jianshu.com)

posted @ 2022-03-17 17:14  乐盘游  阅读(56)  评论(0编辑  收藏  举报