2016-08-03 6 views
1

Kann mir jemand bitte sagen, warum diese codedouble in php zurückgibt?Php Cast zu Int gibt doppelte

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

Gettype($personal_id) kehrt double wie diese 4294967294.0

Wie kann ich dieses Problem lösen? Vielen Dank.

+0

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

+2

Ist Ihre Nummer zu groß für Integer? –

+0

Ja, es ist zu groß für Integer. Aber wie löst man es elegant? –

Antwort

1

Warum Doppel versuchen? Weil die Variable nicht in die ganze Zahl passt.

Sie können gmp zum Emulieren einer großen Ganzzahl verwenden. http://php.net/manual/en/intro.gmp.php

Aber ich denke, es ist overengineering. Was, wenn eine Zeichenkette anstelle einer Ganzzahl verwendet wird?

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

Das sieht gut aus. Vielen Dank. –

0

versuchen Sie dies;

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

Funktioniert nicht. –

0

Vielleicht sollten Sie intval()(cf. official documentation)

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

intval() gibt -2 in diesem Fall zurück. –

+0

Es ist zu groß für einen int, Sie müssen $ person ['born_number'] ändern. Wie wirst du es benutzen und woher kommt es? – Treast

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

Dies funktioniert nicht. Es gibt negative Werte zurück. –

+0

müssen Sie die Variable mit Ihrer ursprünglichen ändern. –