• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

intval() in besser?

Status
Für weitere Antworten geschlossen.

Asterixus

Aktives Mitglied
Hallo,

gibt es eine Funktion, bei der es möglich ist ein intval() zu machen, bei dem das Resultat höher als 2147483647 ist, aber immer noch ein Ganzes ist?
 
Nimm einfach als Typ float und runde das Ergebnis, dann hast du es trotzdem als Ganzzahl.
Damit kann man aber nicht jede Zahl darstellen und wenn er wieder zu int rundet landet er beim gleichen Problem.


@Asterixus: Wofür brauchst du das denn? Es ist auf jeden Fall möglich beliebig große Zahlen (mit etwas Aufwand) zu speichern. Nur ist es dann kein Integer mehr.


N43
 
Nimm einfach als Typ float und runde das Ergebnis, dann hast du es trotzdem als Ganzzahl.

Wie rundet man Zahlen? Habe nichts gefunden.

Nimm einfach als Typ float und runde das Ergebnis, dann hast du es trotzdem als Ganzzahl.
Damit kann man aber nicht jede Zahl darstellen und wenn er wieder zu int rundet landet er beim gleichen Problem.


@Asterixus: Wofür brauchst du das denn? Es ist auf jeden Fall möglich beliebig große Zahlen (mit etwas Aufwand) zu speichern. Nur ist es dann kein Integer mehr.


N43
Ich brauche das in zwei Fällen, die aber nicht zusammen halten und von daher können zwei Lösungen kein Problem sein:
  • In einem Template diese eine Zahl erscheinen lassen, bei der die Zahl aber auch weit über diese 2147483647 sein kann. Sagt ihr mir dann, wo liegt das Problem? Das Problem (wie auch beim zweiten Punkt) liegt daran, dass ich diese Zahl mit 10 % addiere und ich nur ganze Zahlen brauche.
  • Ich überprüfe, ob (jetzt in diesem Fall ein Gebot) die eingegeben Zahl mit der Zahl übereinstimmt, die eben gesagt wurde.
 
Wie rundet man Zahlen? Habe nichts gefunden.
mit round().

Float zu verwenden kann aber für deine Anwendung fatale Auswirkungen haben, da nicht alle Zahlen mit float exakt dargestellt werden können.

z.B.: liefert der folgende Code
PHP:
<?php

$x = pow(2, 128);
echo $x . "\n";

$y = $x + 1;
echo $y . "\n";

echo ($x == $y)? "x = y" : "x /= y";

?>
die Ausgabe:
Ausgabe schrieb:
3.40282366921E+38
3.40282366921E+38
x = y

Ich brauche das in zwei Fällen, die aber nicht zusammen halten und von daher können zwei Lösungen kein Problem sein:
  • In einem Template diese eine Zahl erscheinen lassen, bei der die Zahl aber auch weit über diese 2147483647 sein kann. Sagt ihr mir dann, wo liegt das Problem? Das Problem (wie auch beim zweiten Punkt) liegt daran, dass ich diese Zahl mit 10 % addiere und ich nur ganze Zahlen brauche.
  • Ich überprüfe, ob (jetzt in diesem Fall ein Gebot) die eingegeben Zahl mit der Zahl übereinstimmt, die eben gesagt wurde.

Da bietet sich z.B. die Math_BigInteger Klasse von PEAR an.

Oder selber mit einer verketten Liste programmieren.

N43
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben