去除百分号等字符
它们都能把 "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%"
,直接返回数字。你想要吗?