2015-06-03 6 views
1

1. сценария:Weird выход, когда число начинается с 0

$num = "00445790"; 
echo $num; 

возвращается:

00445790 

2. подлинника

$num = 00445790; 
echo $num; 

возвращается:

2351 

Может кто-нибудь объяснить, почему я получаю 2351 по второму сценарию?

+5

Вам нужно узнать о типах данных –

+0

И вот с чего начать http://php.net/manual/en/language.types.php – RiggsFolly

+1

Я снова открываю этот вопрос, что первоначальный обман не покрыл эффект ' В номере. –

ответ

7

Integers, которые начинаются с нуля, считаются восьмеричными. Поскольку восьмеричные целые числа используют только числа от 0 до 8, все из 9 on игнорируются.

So 00445790 становится 004457 который 2351 в десятичной форме.

+0

Спасибо, это действительно прояснилось. Я был очень смущен, почему это происходит, но это имеет большой смысл! Еще раз спасибо. –

+0

Звучит странно. Даже если PHP является языком интерпретатора, он может обнаружить, что последовательность цифр некорректна (это неправильный восьмеричный, если главный ноль является преобладающим) и должен вызывать предупреждение. Или признать, что это фактически десятичное число и рассматривать его как таковое. (Мои дни PHP немного назад ...) –

+0

@ThomasKilian Предупреждение будет в конечном итоге полезно в такой ситуации, а не в потенциально затрудненном обнаружении ошибки. –

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

  • Нет связанных вопросов^_^