C/C ++: printf использует запятые вместо точек в качестве десятичного разделителя

Мне нужно, чтобы моя программа показывала результат с использованием запятых в качестве разделителя на десятичные числа.

По этой ссылке: http://www.java2s.com/Code/ Java/Development-Class/Floatingpointwithcommasf.htm вы можете использовать в Java что-то вроде этого:

System.out.printf("Floating-point with commas: %,f\n", 1234567.123);

Есть ли флаг или что-то, что я могу использовать, чтобы иметь подобное поведение в C?

Заранее спасибо!

4
nl ja de
Это будет дублировать этот вопрос здесь: stackoverflow.com/questions/7684014/…
добавлено автор Mats Petersson, источник
добавлено автор missimer, источник

2 ответы

Если вы хотите, вы можете установить текущий язык в начале вашей программы:

#include 
#include 


int main()
{
    setlocale(LC_NUMERIC, "French_Canada.1252");//".OCP" if you want to use system settings
    printf("%f\n", 3.14543);
    return 0;
}
18
добавлено
Точность вашей ошибки отсутствует.
добавлено автор Ring Ø, источник
Аналогично, const struct lconv * loc = localeconv (); может использоваться для получения специфики локали. Оттуда вы можете проверить loc-> decimal_point [0] , чтобы узнать, какой разделитель десятичных чисел используется в данный момент.
добавлено автор Lundin, источник
также вы можете получить текущий язык с помощью setlocale (LC_ALL, NULL); , чтобы восстановить его позже.
добавлено автор elephant, источник

В C аналогичная функциональность отсутствует. Вы можете использовать sprintf для печати в массив символов, а затем вместо запятой заменить запятую. Извините, я не могу придумать лучшего решения.

EDIT: благодаря комментарию Матс Патерссон: Кажется, что установка языка может изменить этот символ. Пожалуйста, посмотрите ссылку, которую он опубликовал.

3
добавлено
+1 - Я думаю, что ваш ответ был лучше моего, так как локаль может быть правильным решением.
добавлено автор James Black, источник