2010-03-05 3 views
0

У меня есть числа в javascript от 01 (int) до 09 (int), и я хочу добавить 1 (int) к каждому из них.Проблема с добавлением чисел Javascript int

Например:

01 + 1 = 2 
02 + 1 = 3 

Но

08 + 1 = 1 
09 + 1 = 1 

Я знаю решение. Я определил их как тип float.

Но я хочу узнать, в чем причина этого результата?

спасибо.

+0

Не используйте здесь аббревиатуры twitter. Переформатируйте свой вопрос. –

ответ

8

Javascript, как и другие языки, могут относиться к номерам, начинающимся с 0 как восьмеричное. Это означает, что действительны только цифры от 0 до 7.

Что-то похожее на то, что 08 и 09 рассматриваются как восьмеричные, но поскольку у них есть недопустимые символы, эти символы молча игнорируются. Так что вы на самом деле рассчитываете 0 + 1.

В качестве альтернативы, это может быть так, что весь 08 игнорируется и заменяет его 0.

Лучше всего было бы попробовать 028 + 1 и посмотреть, если вы получаете 3 или 1 (или, возможно, даже 30 если интерпретация действительно странно).

+0

Арф, вы добавляете меня на несколько секунд pax ;-), и вы пишете стиль намного лучше ;-) – RageZ

1

Это потому, что если вы делаете 09 + 1, то 09 формируется как восьмеричный (из-за префикса 0). Восьмеричные значения идут от 0 до 7, ваш код, похоже, доказывает, что определенный движок JavaScript преобразует 8 и 9 в недопустимые символы и просто игнорирует их.

Ю. не должен префикс на 0 ваших номеров, если вы не хотите использовать восьмеричные (например, с использованием обычных десятичных чисел).

Смотрите эту страницу для reference и википедию для того, что является octal

3

Поскольку вы не указали основание, оно рассматривается как восьмеричные числа. 08 и 09 являются недопустимыми восьмеричными числами.

parseInt(08,10) + 1; 

даст правильный результат.

См parseInt

+0

Тот факт, что цитаты не нужны, пугает ум. – Jimmy

0

Как вы можете видеть из приведенных выше ответов, вы имеете тип конфликта. Тем не менее, я думал, что я также предлагаю правильное решение вашей проблемы ...

Так как мы знаем, 08 и 09 рассматриваются как OCAL в этом примере:

08 + 1 = 1 
09 + 1 = 1 

Таким образом, вы должны указать, что они на самом деле:

parseInt("08", 10) + 1 = 1 
parseInt("09", 10) + 1 = 1 

Не определить их как float, если вы хотите, чтобы они были целыми числами.

+0

Вам все равно нужно указать базу: parseInt ('08 ', 10), или вы все равно будете оценивать восьмеричные числа. –

+0

Спасибо - я обновлю пример. – Fenton

0

Я просто проверю номера, например

a = 08; b = 1; c = a + b;

Это дает мне ровно 9

+0

Хотя вы полагаетесь на неявное литье, в котором находится опасность. Являясь явным с вашими типами, вы намного безопаснее! – Fenton

Смежные вопросы