2016-08-03 3 views
1

Может кто-нибудь сказать мне, пожалуйста, почему это code возвращает double в php?Php cast to int возвращает double

$personal_id = ((int) $person['born_number'] * 2); 

Gettype($personal_id) возвращается double как это 4294967294.0

Как я могу решить эту проблему? Благодарю.

+0

try 'intval ($ person ['born_number'] * 2)'; – Afsar

+2

Из-за того, что ваш номер слишком большой для целого числа? –

+0

Да, он слишком велик для целого. Но как решить это элегантным способом? –

ответ

1

Почему дважды? Потому что переменная dot't вписывается в целочисленный размер.

Вы можете использовать gmp для эмуляции большого целого числа. http://php.net/manual/en/intro.gmp.php

Но я думаю, что это чрезмерная инженерия. Что делать, если вместо целых использовать строку?

$personalId = sprintf("%.0f", ($a*2)); 
+0

Это выглядит очень хорошо. Благодарю. –

0

попробуйте это;

$personal_id = floor($person['born_number'] * 2); 
+0

Не работает ..... –

0

Может быть, вы должны попробовать intval()(cf. official documentation)

$personal_id = intval($person['born_number'] * 2); 
+0

intval() возвращает -2 в этом случае. –

+0

Это слишком большое значение для int, вам нужно изменить $ person ['born_number']. Как вы будете использовать его, и откуда оно взялось? – Treast

0
$personal_id = (int)($born_number * 2); 
+0

Это не работает. Он возвращает отрицательные значения. –

+0

вам нужно изменить переменную с оригинальной. –