Javascript parseInt出了什么问题
我在parseInt上遇到了一个问题 我确实将这个parseInt应用于我的所有项目,但今天我遇到了这个问题 我有一个正常的文本输入Javascript parseInt出了什么问题,javascript,jquery,Javascript,Jquery,我在parseInt上遇到了一个问题 我确实将这个parseInt应用于我的所有项目,但今天我遇到了这个问题 我有一个正常的文本输入 我使用jquery检索输入值,然后写入另一个输入 下面是我的jquery代码 $(":input[name='KG']").keyup(calc); function calc(){ var kg = $(":input[name='KG']").val(); kg=parseInt(kg); $(":input[name='KG2']").v
我使用jquery检索输入值,然后写入另一个输入
下面是我的jquery代码
$(":input[name='KG']").keyup(calc);
function calc(){
var kg = $(":input[name='KG']").val();
kg=parseInt(kg);
$(":input[name='KG2']").val(kg);
}
猜猜看,这就是我得到的结果input@KG > show@KG2
28>28
028>2
34>34
034>28
9>9
09>0
有人知道出了什么问题吗?它可以通过使用Math.round来解决。您忘记了第二个参数,该参数指定解释整数的基数。要修复您的示例,请尝试以下操作:
$(":input[name='KG']").keyup(calc);
function calc(){
var kg = $(":input[name='KG']").val();
kg=parseInt(kg, 10);
$(":input[name='KG2']").val(kg);
}
将代码更改为
kg=parseInt(kg, 10);
必须将基数(第2个参数)传递给parseInt()
,否则它将根据内容进行猜测。“猜测”逻辑全部被描述
在您的情况下,如果字符串以0
开头,而不是以0x
开头,它将假定该字符串为八进制,仅将0-8作为法定字符,并以8为基数进行转换
故事的寓意——始终将基数值传递给
parseInt()
028
,034
和09
被视为八进制数,因为它们以0
开头,并且您没有指定基数8和9是无效数字,因此第一个和最后一个数字分别为2和0,第二个数字转换为十进制数3*8+4=28
使用parseInt(kg,10)代码>请注意,这种行为在ES5()中已过时。无论如何,在其他方面与ES5兼容的浏览器仍然使用前导零进行八进制操作,因此在一段时间内仍然需要基数。