js保留N位小数并且不进行四舍五入的奇思妙想

背景:从接口获取到一个数字,前端需要转换到万,亿等单位。并始终保留两位小数,不能四舍五入。

实现方式一:
使用if else的方式分别处理,整数,一位小数,两位小数,三位小数的情况,并且计算到小数点的位置。代码比较复杂,决定不采用

实现方式二:
使用split + substr ,具体实现。

/**
 *
 * @param value  任意数值
 * @param count  大于0的整数
 * @returns { string }
 */
const toFixed = function(value: number, count: number): string {
  // 保留两位小数的情况
  // 1   ---> [1 , 00 ]
  // 1.1 ---> [1 , 1  ]
  // 1.11 --->[1 , 11 ]
  // 1.123 -->[1 , 123]
  const [integer, decimal = '0'.repeat(count)] = value.toString().split('.');
  // 加0是为了第二种情况
  return integer + '.' + (decimal + '0'.repeat(count - 1)).substr(0, count);
};

实现方式三:使用replace + Regexp ,具体实现

/**
 *
 * @param value  任意数值
 * @param count  大于0的整数
 * @returns { string }
 */
const toFixedReg = function(value: number, count: number): string {
  // 小括号内是我们想要的结果
  const reg = new RegExp(`(\\d+\\.?\\d{0,${count}})[\\.\\d]*`);
  //拼接.00是考虑入参是整数的情况  拼接0是考虑入参是一位小数的情况
  //      保留两位小数的情况
  //      1 ----> 1.00-------> 1.00 + 0 -----------------> 1.00
  //      1.1---> 1.1.00-----> 1.1  + 0 -----------------> 1.10
  //      1.11--> 1.11.00----> 1.11 + 0 -----------------> 1.11
  //      1.123-> 1.123.00---> 1.12 + 0 -----------------> 1.12
  return (value + '.' + '0'.repeat(count)).replace(reg, '$1' + '0'.repeat(count - 1)).replace(reg, '$1');
};

引用 js保留N位小数并且不进行四舍五入的奇思妙想 - 知一叶秋 - 博客园 (cnblogs.com)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值