2013-07-11 9 views
5

ich auf einer Maschine mit en_US locale und dieses Stück PHP-Code sitzenPHP: locale-abhängige float zu String werfen

setlocale(LC_ALL,'de_DE.utf8'); 
var_dump((string)1.234); 

kehrt

string(5) "1.234" 

während auf der Maschine meines Kollegen, die hat eine deutsche locale, gibt es

string(5) "1,234" 

Warum zum Teufel PHP das Gebietsschema verwenden, wenn eine Schublade gesteckt STRI schwimmt ngs? Wie kann ich es deaktivieren? Ich möchte diese Funktion haben, String (5) "1.234" auf allen Maschinen zurückzugeben, unabhängig von den Gebietsschemaeinstellungen.

Zweitens und weniger wichtig: Warum ignoriert PHP die Setlocale auf meinem Rechner?

+0

Es ignoriert nicht die SetLocale, Sie müssen das Gebietsschema installiert haben, (funktioniert nicht in Windows) Überprüfen Sie den Rückgabewert von SetLocale, wenn es FALSCH ist, dann haben Sie nicht das Gebietsschema. – DevZer0

+0

@ DevZer0 .. ein Recht, ich denke, es ist nur nicht auf meinem Rechner installiert ... – Treecj

+0

http://php.net/setlocale hat einen Rückgabewert, Sie überprüfen nicht in Ihrem Fragen Code dafür, damit wir es können nicht sagen, ob die Einstellung des Gebietsschemas erfolgreich war oder einfach ignoriert wurde. – hakre

Antwort

2

Warum zum Teufel benutzt PHP das Gebietsschema, wenn Typisierung in Strings schwebt?

Das ist es Verhalten ist

Wie kann ich sie deaktivieren?

Sie können nicht (soweit ich weiß).

Sie können das Gebietsschema auf setzen, wenn Sie Gebietsschema installiert haben.

Ich möchte diese Funktion haben String (5) "1.234" auf allen Maschinen, unabhängig von Gebietsschema Einstellungen.

Sie haben zwei Möglichkeiten:

1) number_format(1.234, 3, '.', '');

2) sprintf('%.3F', 1.234);

In beiden Fällen müssen Sie angeben, wie Ziffern Dezimal können Sie wollen.

Im zweiten Fall können Sie diese nicht angeben und einen Standardwert von 6.

bekommen Wenn Sie Sie sie können trim nicht die nachfolgende Nullen werden soll.

Zweitens und weniger wichtig: Warum ignoriert PHP das setlocale auf meinem Rechner?

Als DevZer0 kommentierte Sie möglicherweise nicht Gebietsschema installiert.

+0

Anstelle von 'en_US' können Sie das Gebietsschema mit' setlocale (LC_NUMERIC, 'C') 'auf' C' setzen. Dies sollte auf jedem System funktionieren, um das sprachunabhängige "Standardverhalten" zu erhalten. – ausi