我想解析包含经度和纬度的用户输入。我想要做的是将一个字符串强制为一个数字,保留它的符号和小数位。但我想做的是在用户输入无效时显示一条消息。我应该关注哪一个
parseFloat(x)
第二
new Number(x)
第三
~~x
第四
+x
我想解析包含经度和纬度的用户输入。我想要做的是将一个字符串强制为一个数字,保留它的符号和小数位。但我想做的是在用户输入无效时显示一条消息。我应该关注哪一个
parseFloat(x)
第二
new Number(x)
第三
~~x
第四
+x
如果必须在这两者之间进行选择,我会使用Number(x)
,因为它不允许尾随垃圾。(好吧,它“允许”它,但结果是NaN
.)
也就是说,Number("123.45balloon")
是NaN
,但是parseFloat("123.45balloon")
是123.45
(作为一个数字)。
正如克林先生指出的那样,其中哪个“更好”取决于您。
编辑- 啊,你已经添加回来+x
和~~x
. 正如我在评论中所写,+x
相当于使用Number()
构造函数,但由于运算符的语法灵活性,我认为这有点冒险+
。也就是说,剪切和粘贴很容易引入错误。如果你知道你想要一个整数(一个 32 位整数),那么这个~~x
表格很好。但是,对于纬度/经度而言,这可能不是您想要的。
第一个更好。这是明确的,而且是正确的。你说你想解析浮点数。~~x
会给你一个整数。
要测试是否input
是数字,请使用以下命令:
function isNumeric(obj){
return !isNaN( parseFloat(obj) ) && isFinite( obj );
}
要String
转换为Number
,使用+
,这是最快的方法:
一元 + 运算符还将其操作数类型转换为数字,因为它不执行任何额外的数学运算,它是将字符串类型转换为数字的最快方法
所以总的来说,你可能需要这个:
if(!isNumeric(inputValue)){
alert('invalid number');
}else{
var num = +inputValue;
}
isNumeric
借来的jQuery
这是我要编写的代码,用于重复输入,直到获得正确的输入。
var d;
do {
d = prompt("Enter a number");
d = new Number(d);
} while( isNaN(d) );
document.write( d );
注意: 如果任何字符是非数字的,new Number(d)
将始终给出,而将忽略尾随的无效字符。NaN
parseFloat(d)