rvi*_*lta 6 javascript string numbers nan parsefloat
我想测试一个字符串是否可以转换为float.我一直在尝试使用parseFloat来实现这一目标.
console.log(!isNaN(parseFloat("10000"))); // should return true
console.log(!isNaN(parseFloat("100T0"))); // should return false (but doesn't)Run Code Online (Sandbox Code Playgroud)
事实证明,parseFloat只要碰到一个不是数字的字符就会停止读取字符串,然后返回它到目前为止所传递的任何字符.所以parseFloat("100T0")实际上是返回100而不是NaN.
什么是更好的js测试,看看一个字符串是否可以被转换为浮点数?
JavaScript默认情况下没有一个内置操作可以匹配合理的"这个字符串是一个数字"的定义(无论如何).你可以亲近Number,一元+,或隐式转换(刚好路过串入isNaN直接),需要提醒的是,他们都做同样的事情,这包括考虑""是0:
// Number
console.log(!isNaN(Number("10000"))); // true
console.log(!isNaN(Number("100T0"))); // false
console.log(!isNaN(Number(""))); // true (!)
// Same as implicit (here triggered with a unary +)
console.log(!isNaN(+"10000")); // true
console.log(!isNaN(+"100T0")); // false
console.log(!isNaN(+"")); // true (!)
// Same as implicit
console.log(!isNaN("10000")); // true
console.log(!isNaN("100T0")); // false
console.log(!isNaN("")); // true (!)Run Code Online (Sandbox Code Playgroud)
我对相关问题的回答会详细介绍您的选择.
因此,您可以执行正则表达式(确保允许科学记数法!)或预先检查"":
function toNumber(str) {
str = String(str).trim();
return !str ? NaN : Number(str);
}
console.log(!isNaN(toNumber("10000"))); // true
console.log(!isNaN(toNumber("100T0"))); // false
console.log(!isNaN(toNumber(""))); // falseRun Code Online (Sandbox Code Playgroud)
你不会得到你期望的parseFloat(),因为它试图解析100T0并返回100,所以它是一个有效的Number.
isNaN()您可以使用正则表达式代替使用,以检查给定的内容string是否仅由数字组成。
这是您需要的正则表达式/^\-?[0-9]+(e[0-9]+)?(\.[0-9]+)?$/,这就是您的代码应该如何:
function isItNumber(str) {
return /^\-?[0-9]+(e[0-9]+)?(\.[0-9]+)?$/.test(str);
}
Run Code Online (Sandbox Code Playgroud)
演示:
function isItNumber(str) {
return /^\-?[0-9]+(e[0-9]+)?(\.[0-9]+)?$/.test(str);
}
Run Code Online (Sandbox Code Playgroud)