2

我刚刚在 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);
}

猜猜看,这是我得到的结果
input@KG > show@KG2
28 > 28
028 > 2
34 > 34
034 > 28
9 > 9
09 > 0

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

4

3 回答 3

5

028,034并被09视为八进制数,因为它们以开头0并且您没有指定基数。8and9是无效的数字,所以你得到第一个20最后一个的 and ,第二个被转换为 decimal 3*8 + 4 = 28

采用parseInt(kg,10);

于 2012-08-30T02:54:31.483 回答
2

您忘记了第二个参数,它指定了解释 int 的基数。要修复您的示例,请尝试以下操作:

$(":input[name='KG']").keyup(calc);
function calc(){
   var kg = $(":input[name='KG']").val();
   kg=parseInt(kg, 10);
   $(":input[name='KG2']").val(kg);
}
于 2012-08-30T02:53:55.497 回答
2

将您的代码更改为;

kg=parseInt(kg, 10);

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

在您的情况下,如果字符串以 a0而不是 a开头0x,它将假定字符串是八进制的,它仅将 0-8 作为合法字符并以 8 为基数进行转换。

故事的寓意 - 总是将基数值传递给parseInt().

于 2012-08-30T02:54:23.593 回答