10

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

parseFloat(x)

第二

new Number(x)

第三

~~x

第四

+x
4

4 回答 4

18

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

也就是说,Number("123.45balloon")NaN,但是parseFloat("123.45balloon")123.45(作为一个数字)。

正如克林先生指出的那样,其中哪个“更好”取决于您。

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

于 2012-07-23T13:43:04.317 回答
6

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

于 2012-07-23T13:43:57.010 回答
3

要测试是否input是数字,请使用以下命令:

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

String转换为Number,使用+这是最快的方法

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

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

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

isNumeric借来的jQuery

于 2012-07-23T13:49:57.130 回答
1

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

var d;

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

document.write( d );

注意: 如果任何字符是非数字的,new Number(d)将始终给出,而将忽略尾随的无效字符。NaNparseFloat(d)

于 2012-07-23T14:07:45.570 回答