将字符串转换为javascript中的数字

时间:2012-07-23 13:40:17

标签: javascript

我想解析包含经度和纬度的用户输入。我想要做的是将字符串强制转换为数字,保留其符号和小数位。但我想要做的是在用户输入无效时显示消息。我应该遵循哪一个

parseFloat(x)

第二

new Number(x)

第三

~~x

第四

+x

4 个答案:

答案 0 :(得分:18)

如果我必须在这两者之间做出选择,我会使用Number(x),因为它不会允许尾随垃圾。 (好吧,它“允许”它,但结果是NaN。)

Number("123.45balloon")NaNparseFloat("123.45balloon")123.45(为数字)。

正如克林先生所指出的,哪些是“更好”取决于你。

编辑 - 啊,您已添加回+x~~x。正如我在评论中写的那样,+x等同于使用Number()构造函数,但我认为由于+运算符的语法灵活性,它有点风险。也就是说,剪切和粘贴很容易引入错误。如果你知道你想要一个整数(一个32位整数),~~x形式是好的。对于lat / long而言,这可能不是你想要的。

答案 1 :(得分:6)

第一个更好。它是明确的,而且是正确的。你说你想要解析浮点数。 ~~x会给你一个整数。

答案 2 :(得分:3)

要测试input是否为数字,请使用:

function isNumeric(obj){
    return !isNaN( parseFloat(obj) ) && isFinite( obj );
}

要将String投射到Number,请使用+it's the fastest method

  

一元+运算符也将其操作数类型转换为数字,因为它不进行任何额外的数学运算,所以它是将字符串转换为数字的最快方法

总的来说,可能你需要这个:

if(!isNumeric(inputValue)){
    alert('invalid number');
}else{
    var num = +inputValue;
}

isNumeric借鉴jQuery

答案 3 :(得分:1)

这是我写的代码,用于重复获取输入,直到获得正确的输入。

var d;

do {
    d = prompt("Enter a number");
    d = new Number(d);
} while( isNaN(d) );

document.write( d );

注意: new Number(d)如果任何字符为非数字,则总是会NaN,而parseFloat(d)会忽略尾随的无效字符。