2014-11-22 2 views
-2

Если вы разделите 11/10 на javascript, вы получите 1.1. Если вы разделите 011/10 на javascript, вы получите 0.9. Что вызывает разницу в результатах?Ведущий 0 в операнде приводит к разным результатам в разделении при использовании Javascript

+0

Вы можете объяснить это поведение, а не просто ссылаться на ошибку. Как то, что происходит. Почему добавление нуля приводит к испорчению значений. –

+1

, то результат из-за восьмеричной константы не имеет особого отношения к плавающей запятой ... –

+0

Добавление предыдущего «0» означает восьмеричное число. Точно так же, как добавление «0x» означает шестнадцатеричное число. На другом языке, таком как Java, вы можете добавить '0b', указав двоичный номер. Это обычная функция на большинстве языков. Поэтому «011/10 = 0,9» является полностью правильным. –

ответ

3

011 является восьмеричной константой, равной 9.

От https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Integers:

Целые могут быть выражены в десятичной системе (основание 10), шестнадцатеричном (основание 16), и восьмеричном (основание 8).

Ведущий 0 (ноль) на целых буквах указывает, что он находится в восьмеричном. Октальные целые числа могут включать только цифры 0-7.

Также отметим:

Восьмеричные целочисленные литералы устаревшими и были удалены из ECMA-262, стандартный выпуск 3 (в строгом режиме).

C++ также имеет восьмеричные константы.

1

Если номер, с которым вы имеете дело, представлен в виде строки, вы можете указать нужный радиус при его литье на число с помощью parseInt().

+'011' // 9 
parseInt('011') // 9 
parseInt('011', 10) // 11 
Смежные вопросы