跳转至

去除百分号等字符

它们都能把 "10%" 转成数字 10,但原理和适用场景稍有不同,我给你仔细分析一下:


1️⃣ parseFloat(row.progress)

parseFloat("10%") // 10
parseFloat("10.5%") // 10.5
parseFloat("10abc") // 10
parseFloat("abc10") // NaN
  • 原理:从字符串开头解析,直到遇到不能解析的字符停止。
  • 优点:写法简洁,能自动忽略后面的非数字字符(比如 %、字母等)。
  • 缺点:如果字符串开头不是数字,就会返回 NaN

2️⃣ Number(row.progress.replace('%',''))

Number("10%".replace('%','')) // 10
Number("10.5%".replace('%','')) // 10.5
Number("10abc".replace('%','')) // NaN
Number("abc10".replace('%','')) // NaN
  • 原理:先去掉 %,然后把剩余字符串完全转换成数字。
  • 优点:更严格,只能解析纯数字字符串。
  • 缺点:如果字符串里除了 % 还有其他非数字字符,会返回 NaN

✅ 总结

  • 想快速处理后面带 % 的数字parseFloat 更方便。
  • 想严格验证,只允许纯数字(去掉 % 后)Number(str.replace('%','')) 更安全。

对于你这个 <el-progress> 的场景,parseFloat(row.progress) 就够了,简洁又安全。

如果你愿意,我可以帮你写一个安全的通用函数,兼容 "10%"10 甚至 "10.5%",直接返回数字。你想要吗?