js去除多余的0

3,818 阅读1分钟

需求

想去掉小数点后面多余的0, 但是若没有小数点的话、则不替换任何字符。 例子:
输入: 13.00 -----> 输出:13
输入: 13.002100 -----> 输出:13.0021
输入: 13 -----> 输出:13

1. parseFloat()

image.png

2. Number()

image.png

3. 借助正则表达

const item = '13.00100'
const regexp=/(?:\.0*|(\.\d+?)0+)$/
console.log(item.replace(regexp,'$1'))

正则表达式解析如下: (?:.0*|(.\d+?)0+)$

  1. (?:reg1|reg2) -> 正则分组、要么匹配reg1、要么匹配reg2 && 优先匹配reg1
  2. .=* -> 匹配.开头, 后面跟着0或0以上数量的0, 用空值填充;
  3. (.\d+?)0+ -> 匹配一个.开头后面跟着任意数字、接着在末尾尽可能多的匹配0, 匹配完成后生新的捕获组内容;
  4. $ -> 表示匹配结果需要以0作为结尾

弊端: 若传进来的数据类型为非字符串数字的话, 会引发报错, 比如:

const obj = {}
const { price } = obj
// 改进代码如下: 初始赋值必须是字符串类型、赋值为0会报错.
// const { price = '' } = obj
const regexp=/(?:\.0*|(\.\d+?)0+)$/
console.log(price.replace(regexp,'$1'))

image.png 若上述注释掉的代码打开, 再允运行下你会发现输出为空.
这也是体现了赋初始值的重要性.

总结

     一般涉及到价格的展示、都会需要去除多余的0&&对过长的数字进行截取, 至于选择哪种实现方案, 可根据实际需要来选。

写在最后

若有错误之处, 恳请留言, 定会及时更正!
若觉着对您有帮助的话恳请点个赞或着收藏吧!