2016-08-15 3 views
0

я случайно сделать оператор деления в PHP, как это:Division оператор в PHP

$a = 012; //or 0012 or even 00012 
echo $a/4; 
echo gettype($a/4); 

я получил результат: 2.5 double. // Я не знаю, почему вывод 2.5.

Я попробовал еще раз:

$a=12; 
echo $a/4; 
echo gettype($a/4); 

Этот вывод 3 Integer воли.

Я прочитал документацию в https://secure.php.net/manual/en/language.operators.arithmetic.php, но все еще не могу это понять.

Может ли кто-нибудь мне помочь?

ответ

8

Значение, которое звезды с нулем является восьмеричным. Таким образом, 012 в восьмеричном формате 10 в десятичном формате. 10 разделенных 4 - 2,5.

+0

Как я понимаю, если '012' является восьмеричным, это будет« автокорректировать »от восьмеричного до десятичного? –

+0

Нет. Нет необходимости изменять его тип данных, потому что он уже численный. –

+0

Как он может знать, что '012' - восьмеричный, а' 4' - десятичный? Я попытался сменить оператор деления на это: '$ a = 012; $ Ь = 04; echo $ a/$ b, echo gettype ($ a/$ b) ' Я все еще получаю' 2.5 double'. Я использовал caculator в окнах, сменил режим на Oct (позиция для восьмеричного) и выполнил оператор деления '12/4', результатом будет' 2'. Я до сих пор смущаюсь по этому поводу. –

0

Одна вещь, которую вы можете сделать, это очистить значение $ a до его использования.

$a = ltrim($a, '0'); 

Это удалит все предыдущие 0s и означают, что 012 => 12 и не 10, когда вы приводите его к ИНТ

например

$a = 0012; 
$a = ltrim($a, '0'); 
echo $a/4; 
echo gettype($a/4); 
+0

[Это не правильный способ сделать это] (http://php.net/manual/en/function.octdec.php) –

+0

Я знаю, что это не способ конвертировать октябрь в dec, но вопрос был как это были плохие пользовательские данные, поэтому кто-то опубликовал значение 012 вместо 12 в форме. Они означают 12, но дополнительный 0 заставляет PHP работать в октевом режиме. –