parseInt出了什么问题

时间:2012-08-30 02:52:59

标签: javascript jquery

我刚刚在parseInt上遇到1个问题 我将这个parseInt应用于我的所有项目,但今天我只是遇到了这个

我有正常的文字输入<input type='text' name='KG'> 我使用jquery来检索输入值,然后写入另一个输入 <input type='text' name='KG2'>

下面的

是我的jquery代码

$(":input[name='KG']").keyup(calc);
function calc(){
   var kg = $(":input[name='KG']").val();
   kg=parseInt(kg);
   $(":input[name='KG2']").val(kg);
}
猜猜是什么,这是我得到的结果 输入@ KG&gt;显示@ KG2
28&gt; 28个
028&gt; 2
34&gt; 34个
034&gt; 28个
9> 9
09&gt; 0

谁知道出了什么问题?它可以通过使用Math.round来解决。

3 个答案:

答案 0 :(得分:5)

02803409被视为八进制数,因为它们以0开头而您没有指定基数。 89是无效数字,因此第一个和最后一个获得20,第二个被转换为十进制3*8 + 4 = 28。< / p>

使用parseInt(kg,10);

答案 1 :(得分:2)

你忘了第二个参数,它指定了解释int的基数。要修复你的例子,试试这个:

$(":input[name='KG']").keyup(calc);
function calc(){
   var kg = $(":input[name='KG']").val();
   kg=parseInt(kg, 10);
   $(":input[name='KG2']").val(kg);
}

答案 2 :(得分:2)

将您的代码更改为;

kg=parseInt(kg, 10);

您必须将基数(第二个参数)传递给parseInt(),否则它将根据内容进行猜测。 “猜测”逻辑全部描述为here on MDN

在您的情况下,如果字符串以0而不是0x开头,则假定字符串为八进制,仅将0-8视为合法字符,并在基数8中转换。 / p>

故事的道德 - 总是将基数值传递给parseInt()