2011-10-07 16 views
14

używam następującej składni C++ na wyjściu wartość zmiennoprzecinkową na platformie Windows:C++ printf z% f ale zlokalizowana w kraju użytkownika

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

to działa dobrze, jeśli uruchomić go na angielski konto użytkownika. Zakładam, że jeśli uruchomię to, powiedzmy, francuskie konto użytkownika, wynik będzie wynosił 1,50 zamiast 1,50.

Dlaczego go nie widzę i jak uzyskać pożądany wynik?

Odpowiedz

16

Znak rzutu (tj. "." Lub ",") jest określony przez bieżące ustawienia narodowe. Domyślne ustawienia regionalne (przynajmniej w systemach Windows) to "C", które definiuje "." jako znak radix.

Możesz ustawić bieżące ustawienia regionalne dla programu C/C++ przy użyciu funkcji setlocale.

Aby ustawić locale do bieżącej lokalizacji użytkownika/systemu, można użyć następujące oświadczenie:

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

Zobacz here (por przykładów na powiązanej stronie ...) Więcej informacji o setlocale

+0

Dzięki, ale kiedy mam zadzwonić setlocale - na początku, kiedy aplikacja inicjuje lub przed każdym printf? – ahmd0

+1

Wystarczy raz zadzwonić na początku aplikacji. – MartinStettner

+2

Alternatywą C++ jest 'std :: cout.imbue (std :: locale (" "));' – MSalters