LINUX.ORG.RU

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


0

0

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

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

Ответ на: комментарий от stevejobs

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

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

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

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

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

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

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

i-rinat ★★★★★
()

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

p.s.

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

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

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

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

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

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

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

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

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

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