2011-10-07 12 views
14

sto usando la seguente sintassi C++ per emettere un valore in virgola mobile su una piattaforma Windows:C++ printf con% f, ma localizzato per paese dell'utente

printf("%.2f", 1.5); 

Funziona bene se l'eseguo su un inglese account utente. Il mio presupposto era che, se lo eseguivo, ad esempio l'account utente francese, l'output sarà 1,50 anziché 1,50.

Perché non lo vedo e come produrre il risultato desiderato?

risposta

16

Il carattere di radice (ad esempio "." O ",") è definito dalla locale corrente. La locale predefinita (almeno per i sistemi Windows) è "C", che definisce "." come personaggio di Radix.

È possibile impostare le impostazioni internazionali correnti per un programma C/C++ utilizzando la funzione setlocale.

per impostare il locale alle impostazioni internazionali di sistema/utente corrente, è possibile utilizzare la seguente dichiarazione:

#include <locale.h> 
setlocale(LC_ALL, ".OCP"); 

Vedi here (cfr gli esempi sulla pagina collegata ...) per ulteriori informazioni su setlocale

+0

Grazie, ma quando devo chiamare setlocale - all'inizio quando l'applicazione inizializza o prima di ogni printf? – ahmd0

+1

È sufficiente chiamarlo una volta all'inizio della tua app. – MartinStettner

+2

L'alternativa C++ è 'std :: cout.imbue (std :: locale (" "));' – MSalters