PHP Vergleich großer Zahlen

whitewolf45

Active member
ID: 242802
L
24 November 2008
28
1
Hi Leute,

bin gerade dabei ein bisschen mit php zu werkeln. Zahlen sind ja integer-Werte, soweit bin ich schon.. Mein Problem ist nur, dass ich etwas schreibe, wo 20stellige Zahlen (die man eingibt) mit denen in einer db verglichen werden sollen. Dafür gibt es ein Formularfeld. Mein Problem ist jetzt nur, dass php die Zahlen scheinbar nicht richtig überprüft, weil sie zu lang sind. Es werden also alle Zahlen, welche 20-stellig sind (und das sind nur 3 in der DB) als "eingegeben" vermerkt. Noch zur Info: die Zahlen unterscheiden sich nur in den letzten 2 Stellen...

Danke schon mal für sinnvolle Vorschläge :)
 
eine Idee wäre, die Tabelle so aufzusteilen, dass du eine Spalte machst mit "Million" und eine mit dem REst! Also die Zahlen aufteilst und dann deine Vergleichszahl ebenfalls aufteilst und beide Teile vergleichst.

Die maximale Integergröße ist jedoch Platform abhängig und bei einem 64bit system um einiges größer als bei einem 32bit. LINK
 
Falls nur die Überprüfung in PHP schief geht, probier mal, ob bccomp() Dir weiterhilft. Die Funktion kann mit beliebig grossen Zahlen umgehen.
 
Die maximale Integergröße ist jedoch Platform abhängig [...]
PHP is "clever" und castet automatisch nach Float, wenns kein Integer mehr is. Du merkst also nix, wenn du 20 Stellen abspeicherst.

... wohl aber, wenn du einen Vergleich zwischen zwei fast gleichgroßen großen Zahlen hast: dann is der Unterschied nämlich 0, weil die letzten Stellen keinen Platz mehr in Mantisse hatten.

Das als Erklärung, wieso PHP ne Gleichheit meldet.
 
einfacher trick wäre auch ein typcast zu benutzen, wo der vergleich immer klappt...

(string)integer_wert

sind beide int werte von 20 stellen strings, klappt der php vergleich auf gleichheit um einiges besser als mit integer zahlen ;)

Anmerkung:
ob 64 oder 32 Bit, php hat als reservierung für int werte einen festen wertebereich, der sich nicht an der Bitzahl der CPU orientiert !
 
Anmerkung:
ob 64 oder 32 Bit, php hat als reservierung für int werte einen festen wertebereich, der sich nicht an der Bitzahl der CPU orientiert !

nein natürlich nicht :roll:
Der Wertebereich berechnet sich ja auch nicht rein zufällig aus der Bitzahl.

für dich:
The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.

https://php.net/manual/de/language.types.integer.php