Цитата
Там вручную устанавливается локаль
Где там ?
Цитата
если ты вставишь русскую локаль - у тебя будет та же самая запятая
Код
setlocale(LC_NUMERIC, "ru_RU.UTF-8");
printf("%1.3f", 2.645);
Выводит с точкой
Код
setlocale(LC_NUMERIC, "");
printf("%1.3f", 2.645);
С запятой.
Код
Выводит с точкой. Без setlocale.
Если отказаться от си-функций
Код
std::cout << 2.64 << std::endl;
Выводит с точкой в независимости от того был ли вызов setlocale или нет.
Если же ты имеешь в виду класс locale, то он не работает для printf. Объект такого класса нужно привязывать к потокам и/о.
П.С. хочу еще заметить, что играет роль кодировка исходников, т.к. компилятор явно ( setlocale(LC_NUMERIC, "") ) и не явно задает локаль для функций, основываясь на кодировке исходника. У меня такая : Unicode (UTF-8 with signature) - Codepage 65001, у тебя же скорее всего Codepage -1251.