Mailinglisten-Archive |
On Thu, Jan 11, 2001 at 09:52:07PM +0100, Thomas Bartz wrote: > > So ganz genau hab ich das noch nicht verstanden. Erstens, nimm mal ne > > neuere PHP Version. Zweitens kann man number_format() > > [http://php.net/number_format] das ganze sehr elegant ausgeben. > > Drittens, bei DM Beträgen sollte man wegen der Genauigkeit mit Pfennig > > Beträgen rechnen. > > das problem tritt auf, wenn man einen benutzer einen geldbetrag eingeben > lässt. alles was ins formularfeld eingetragen wird kommt ja als String im > nächsten Skript an, also muss ich den String erst in einen adäquaten > datentyp, in dem fall Double, umwandeln um auch nur irgendwas damit machen > zu können. Das kann so auf keinen Fall funktionieren, denn Du schreibst, weiter unten, dass der Benutzer auch "2.50 DM" in ein Feld eingeben kann. Dieser String kann nicht so ohne weiteres in ein double umgewandelt werden. > also, benutzer gibt möglicherweise folgendes ein: > "2.50 DM" ... er nimmt einen punkt, weil er meint, im Computer macht man das > bei Kommazahlen (das formularfeld nennen wir mal "cash") - benutzer machen > ja alles mögliche, was sie nicht tun sollen, also will ich das irgendwie > abfangen. ich sage nun also dem bearbeitenden Skript, es solle mir aus > diesem Skript einen Double machen, damit ich damit rechnen kann. > -cut-------------------------------- > <?php > settype($cash, "double"); > echo $cash; > ?> > -cut-------------------------------- > jedes normale system würde, denn so ist die funktion settype definiert, > "2.5" ausgeben. bei dem system in meiner firma ist das aber nicht der fall, > ich bekomme nur "2" raus. > gibt der User hingegen "2,50" an, funktioniert auch das kleine skript und > die ausgabe lautet "2,5". Deshalb hab ich auch gesagt, Du solltest eine neuere PHP Version einsetzen. Es gab mal ein locale Bug, d.h. es wurde mal das Komma als Trennzeichen bei deutschen PHP Versionen interpretiert und dann funktionierte die ganze Arithmetik nimmer. > um das problem nochmal zu verdeutlichen, hier noch ein beispiel: > -cut-------------------------------- > <?php > $foo = 5/2; > echo $foo; > ?> > -cut-------------------------------- > erwartete ausgabe: "2.5" > was ich bekommen habe: "2,5" Das sind eindeutige Symptome auf diesen alten locale Bug. > es geht wirklich nur um den unterschied des trennzeichens, also eben Punkt > und Komma, und dass PHP das scheinbar so unterschiedlich behandelt. Wenns in der Firma funktioniert und bei Dir privat nicht, dann liegt das an der PHP Version. Bitte such mal im ChangeLog nach locale. > entweder ist das ein bug der PHP Version 4.0.0 oder eine > Lokalisierungseinstellung, die ich bisher noch nirgends finden konnte. wie > gesagt, auf ein derartiges problem habe noch nirgends auch nur einen hinweis > gefunden. In der php.ini die deutsche locale abschalten oder eben gar nicht aktivieren, dann bleibt zumindestens der Punkt erhalten und PHP rechnet wieder richtig. > nochmal die systemkonfiguration: Redhat 6.1, PHP 4.0.0 und Apache (version > hab ich gerade nicht zur hand). RedHat und Apache können dafür nichts beigetragen haben, es ist wie gesagt ein Fehler in PHP 4.0.0. > ich habe leider keinen einfluss auf die PHP version, sonst wäre ein update > das erste gewesen, was ich gemacht hätte. die funktion number_format() kann > hier, denke ich, auch nichts ändern, vor allem das zweite skript ist recht > eindeutig. Doch ersetze mal echo durch number_format. Ob number_format auch von dem Bug befallen war weiß ich allerdings auch nicht mehr. Ich hoffe aber doch, dass Du privat zu Hause einen Rechner stehen hast, auf dem Du die neueste PHP Version installieren kannst. -Egon -- http://www.linuxtag.de/ http://php.net/books.php http://www.concert-band.de/
php::bar PHP Wiki - Listenarchive