JavaScript单行实现字符串转保留两位小数的数字
需求说明
将内容为123.4567的字符串,通过JavaScript单行简短代码转换为保留两位小数的Number类型数字。
现有两种实现均存在不足:
- 第一种可得到正确结果,但代码冗余:
const x = "123.4567"; // 可实现效果但写法繁琐 const y = parseFloat((parseFloat(x)).toFixed(2)) console.log(typeof(y) + " / " + y) // 输出:number / 123.46
- 第二种直接调用
toFixed(2),返回值为字符串类型,不符合类型要求:
const x = "123.4567"; // 返回类型不符合需求 const z = (parseFloat(x)).toFixed(2) console.log(typeof(z) + " / " + z) // 输出:string / 123.46
简洁实现方案
用一元正号运算符替代外层parseFloat做字符串转数字即可,代码精简且运行效果和原冗余写法完全一致:
const y = +parseFloat(x).toFixed(2)
实现逻辑:
- 先通过
parseFloat(x)把原始字符串转为浮点数,兼容带非数字后缀的字符串(如"123.4567元"会自动截断取有效数字部分) - 调用
toFixed(2)对浮点数做四舍五入保留两位小数,此时返回值为字符串 - 前缀一元
+是JS中最轻量的字符串转数字方式,直接把上一步的字符串转为对应Number类型值
如果确认原始字符串是纯合法数字格式,还可以用更短的写法,把内部的parseFloat也替换为一元加:
const y = +(+x).toFixed(2)
如果偏好语义化更强的写法,也可以用Number构造函数做转换,效果完全相同,仅代码稍长:
const y = Number(parseFloat(x).toFixed(2))
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

