phpbar.de logo

Mailinglisten-Archive

[php] Double mit Strich und Komma..

[php] Double mit Strich und Komma..

eschmid+sic_(at)_s.netic.de eschmid+sic_(at)_s.netic.de
Thu, 11 Jan 2001 22:34:55 +0100


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