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