sprintf, запятые и точки в C (++) (и локализация?) - PullRequest
0 голосов
/ 14 сентября 2010

Я работаю в проекте с использованием openframeworks, и в последнее время у меня были некоторые проблемы при написании XML. Я отследил проблему до спринта:

Кажется, что при определенных условиях вызов sprintf может писать запятые вместо точек на числах с плавающей запятой (например, «2,56» вместо «2,56»). В моей локали числа с плавающей запятой представлены знаком ',', чтобы отделить десятичные дроби от единиц.

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

Мне любопытно узнать, почему sprintf использует другую локализацию. Когда sprintf использует «,» вместо «.» и как это контролировать?

1 Ответ

8 голосов
/ 14 сентября 2010

Десятичный разделитель управляется переменной локали LC_NUMERIC.Для подробностей установите setlocale.Установка его в "C" локаль даст вам точку.Вы можете узнать символы и настройки для текущей локали, просмотрев структуру (только для чтения), возвращаемую localeconv.

...