Christian Kruse: Multiplikation

Beitrag lesen

Moin MudGuard,

[…]
Der String wird, um ihn mit dem Integer multiplizieren zu können, in einen Integer gewandelt.
Welche Locale hast Du eingestellt?

Das ist locale-Unabhängig:

  
ckruse@hermes ~ $ php -r 'setlocale(LC_ALL,"de_DE.UTF-8"); echo 0.5,"\n";'  
0,5  
ckruse@hermes ~ $ php -r 'setlocale(LC_ALL,"de_DE.UTF-8"); echo "0.5" * 2,"\n";'  
1  
ckruse@hermes ~ $ php -r 'setlocale(LC_ALL,"de_DE.UTF-8"); echo "0,5" * 2,"\n";'  
0  
ckruse@hermes ~ $ php -v  
PHP 5.3.3 (cli) (built: Jan  7 2011 19:14:34)  
Copyright (c) 1997-2010 The PHP Group  
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies  
ckruse@hermes ~ $  

Lediglich bei der Ausgabe wird das Trennzeichen aus dem Locale genutzt. Hm, und scheinbar auch das nur, wenn das Locale im Script explizit gesetzt wurde…

  
ckruse@hermes ~ $ locale  
LANG="de_DE.UTF-8"  
LC_COLLATE="de_DE.UTF-8"  
LC_CTYPE="de_DE.UTF-8"  
LC_MESSAGES="de_DE.UTF-8"  
LC_MONETARY="de_DE.UTF-8"  
LC_NUMERIC="de_DE.UTF-8"  
LC_TIME="de_DE.UTF-8"  
LC_ALL="de_DE.UTF-8"  
ckruse@hermes ~ $ php -r 'echo 0.5,"\n";'  
0\.5  
ckruse@hermes ~ $ php -r 'echo setlocale(LC_ALL,NULL)," ",0.5,"\n";'  
de_DE.UTF-8 0,5  
ckruse@hermes ~ $  

Wirklich merkwürdig. Und irgendwie typisch PHP, die Sprache nervt mich seit geraumer Zeit gewaltig…

Ich hätte hier 24 erwartet - aber vielleicht ist  in der verwendeten Locale der . kein Dezimaltrennzeichen ...
Oder es wird bei String->Integer-Umwandlung beim ersten nicht-Integer-Zeichen abgebrochen ...

Beim parsen von Zahlen wird nur der Punkt als Dezimal-Trennzeichen akzeptiert. s.o. :)

LG,
 CK