2016-12-20 10 views
3

Я пытаюсь отобразить мой номер, используя разделитель, из моих текущих региональных настроек.Используйте десятичный разделитель из региональных настроек в CString.Format()

Вот мой код:

Cstring result;  
Cstring myMeasure; 

myMeasure.Format(_T("%.6f %s"), myDouble, myUnit)); 
result.Format("My volume is: %s", myMeasure); 

результат равен, например, "Мой объем: 4,565600 мл". Но, используя французские региональные настройки, результат все тот же (тогда как французский десятичный разделитель - это запятая вместо периода).

Я попробовал метод setlocale() не понятным образом.

char* originalCulture = setlocale(LC_ALL, NULL); // save original culture 
setlocale(LC_ALL,""); 

Cstring result;  
Cstring myMeasure; 

myMeasure.Format(_T("%.6f %s"), myDouble, myUnit)); 
result.Format("My volume is: %s", myMeasure); 

setlocale(LC_ALL, originalCulture); // restore original culture 

Может ли кто-нибудь помочь мне в этом?

ответ

0

Вы должны позвонить setlocale(LC_ALL, "") или setlocale(LC_ALL, "your_locale"), прежде чем делать что-либо еще, чтобы применить локаль. Первый устанавливает стандартную локаль операционной системы, последняя устанавливает конкретную локаль. Также рассмотрите проверку this MSDN article для получения дополнительной информации о setlocale.

+0

Я уже прочитал эту статью MSDN, но это не помогло в десятичном значении. Мне нужен конкретный формат _T («%. 6f% s»). Может быть, именно этот конкретный формат налагает период? –