LINUX.ORG.RU

C/C++ Печать типа double, разделитель - запятая или точка?


0

0

Хочется гарантированно иметь точку. Семейство printf-ов смотрит в локаль и может заюзать запятую, если локаль это диктует. Попробовал std::stringstream - получается точка, даже если локаль говорит использовать запятую. Я бы его использовал, но хочется быть уверенным, что никакая другая реализация C++ STD не содержит такого stringstream, который бы посмел напечатать запятую.

Посоветуйте чё-нибудь ещё.

а если руками выставить локаль прямо перед печатью?

stevejobs ★★★★☆ ()

std::stringstream::imbue()

x0r ★★★★★ ()
Ответ на: комментарий от stevejobs

а если руками выставить локаль прямо перед печатью?

В плюсах можно менять локаль у конкретного стрима (метод imbue). Должно работать, если менять на «C» и обратно. Но на вид как-то костыльно... А в сях setlocale меняет глобальное состояние со всеми вытекающими многопоточными граблями.

const86 ★★★★★ ()
Ответ на: комментарий от stevejobs

Нет морального права менять локаль. Вдруг юзер нашего кода иного мнения о судьбе локали. Запоминать и возвращать обратно - ну его нах такой гимор )

kiverattes ★☆ ()
Ответ на: комментарий от const86

Да чё-то не хочется связываться... Уж лучше чаю налить и запилить собственную функцию printDoubleWithDots() (-;

kiverattes ★☆ ()
Ответ на: комментарий от kiverattes

Запоминать и возвращать обратно - ну его нах такой гимор )

Сделать обёртку.

i-rinat ★★★★★ ()

как вариант - принудительно менять запятые на точки.

p.s.

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

RiseOfDeath ★★★★ ()
Ответ на: комментарий от RiseOfDeath

как вариант - принудительно менять запятые на точки.

самое лучшее решение.

dikiy ★★☆☆☆ ()
Ответ на: комментарий от RiseOfDeath

в некоторых локалях теоретически могут быть запятые, разделяющие каждые 3 цифры

Harald ★★★★★ ()
Ответ на: комментарий от Harald

В некоторых локалях даже вообще может не быть ни запятых, ни точек.

anonymous ()
Ответ на: комментарий от kiverattes

Нет морального права менять локаль. Вдруг юзер нашего кода иного мнения о судьбе локали.

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

ananas ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.