2013-07-11 12 views
5

Sono seduto su una macchina con locale it_IT e questo pezzo di codice PHPPHP: float dipendente dal luogo di stringa di lanciare

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

rendimenti

string(5) "1.234" 

mentre sulla macchina del mio collega che ha un locale tedesco, restituisce

string(5) "1,234" 

Perché diavolo fa PHP usa il locale quando typecasting galleggia a STRI ngs? Come posso disabilitarlo? Mi piacerebbe avere questa funzione return string (5) "1.234" su tutte le macchine, indipendentemente dalle impostazioni locali.

In secondo luogo e meno importante: perché PHP ignora il setlocale sulla mia macchina?

+0

non ignora il setlocale, devi avere la locale installata, (non funziona in windows) controlla il valore di ritorno di setlocale se è FALSE allora non hai le impostazioni internazionali. – DevZer0

+0

@ DevZer0 .. a destra, suppongo che non sia installato sulla mia macchina ... – Treecj

+0

http://php.net/setlocale ha un valore di ritorno, non lo si controlla nel codice delle domande in modo che possiamo non dirti se l'impostazione delle impostazioni locali è andata a buon fine o semplicemente ignorata. – hakre

risposta

2

Perché diavolo PHP usa le impostazioni internazionali quando il typecasting fluttua alle stringhe?

che è il suo comportamento

Come posso disattivarlo?

Non è possibile (per quanto ne so).

È possibile impostare la locale su en_US se è installato locale.

Mi piacerebbe avere questa funzione restituire stringa (5) "1.234" su tutte le macchine, indipendentemente dalle impostazioni locali.

si hanno due opzioni:

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

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

In entrambi i casi è necessario specificare come possono decimale cifre da inserire.

Nel secondo caso, non è possibile specificare di loro e ottenere un valore predefinito di 6.

Se non si desidera che gli zeri finali li si può trim.

In secondo luogo e meno importante: perché PHP ignora il setlocale sulla mia macchina?

As DevZer0 ha commentato che non è possibile installare la localizzazione.

+0

Invece di 'en_US' è possibile impostare le impostazioni locali su' C' con 'setlocale (LC_NUMERIC, 'C')'. Questo dovrebbe funzionare su ogni sistema per ottenere il comportamento "predefinito" indipendente dalla lingua. – ausi

Problemi correlati