Russian Qt Forum
Ноябрь 22, 2024, 20:39
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Интернационализация, локализация
>
точка, точка, запятая... разные вещественные форматы Lin/Win (SOLVED)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: точка, точка, запятая... разные вещественные форматы Lin/Win (SOLVED) (Прочитано 4781 раз)
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
точка, точка, запятая... разные вещественные форматы Lin/Win (SOLVED)
«
:
Февраль 01, 2011, 12:41 »
Честно говоря, не совсем понятно, где об этом стоит посоветоваться, решил лучше здесь. Формат вещественных - это вроде как тоже "локализация". Проблема скорее всего не чисто Qt, очевидно stdlib, однако она возникла при переносе Qt-приложения, здесь наверняка больше опытных в этом людей, значит здесь больше вероятность найти правильное решение.
Некая библиотека была написана на С (!++), изначально (достаточно давно) и разрабатывалась в Linux Debian, потом перенесена в WinXP, сейчас обратно. Приложение использует эту библиотеку, отлаживаю его в Kubuntu 10.10 уже с использованием Qt. Обнаружил такой неожиданный эффект - перестали распознаваться вещественные числа. И формироваться соответственно тоже. Для преобразований в библиотеке используются давно отлаженные нижние функции, они вызывают sptintf() и atof(). Раньше все работало, в Debian без фокусов все преобразовывалось туда-сюда. В Windows тоже проблем не возникало. Разделитель целой и дробной частей - точка, функции из стандартных библиотек ее всегда понимали. Причем, в Windows не зависимо от того, какая локализация и формат вещественных установлен в системе. В Debian локализация была русская, разделители по-умолчанию (наверно, сейчас уже не проверить). В Kubuntu сейчас тоже русская локализация,
в системной локали специально установлен разделитель "точка"
. Но функции stdlib почему-то лепят и понимают... запятую.
И че-то пока как-то не понятно, что с этим делать... Использовать какие-то другие библиотечные функции нельзя - нижний уровень опирается только на стандартные библиотечные средства, это идеологически обоснованно, поскольку библиотека используется в разных проектах, на разных платформах. Можно, конечно, накатать собственные ftoa и atof, хотя это не так тривиально, как может показаться (когда-то очень давно писал ftoa, c тех пор решил, что лучше буду всегда пользоваться библиотечными).
Или это баг сборки конкретной stdlib/stdio? В Win сборка и отладка производятся с использованием mingw, а не MS библиотек. И с mingw все работает правильно! Может кто-нибудь сказать, что происходит в разных версиях Linux? Почему системная локаль не влияет на формат вещественных чисел в стандартной библиотеке?
«
Последнее редактирование: Февраль 01, 2011, 16:08 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: точка, точка, запятая... разные вещественные форматы Lin/Win (SOLVED)
«
Ответ #1 :
Февраль 01, 2011, 16:07 »
тфу блин, locale/setlocale... я уже и забыл про них давно...
да, setlocale( LC_NUMERIC, "C" );
вылечило, стала использоваться точка
но это странно, поскольку в системной локали точно указана точка, а по умолчанию в приложении localeconv()->decimal_point содержит ",", и все поля настроены на русский, как если бы приложение использовало не системную локаль
не может ли Qt устанавливать локаль приложения по-своему? может при инициализации Qt правильнее сказать, чтобы он ставил системную локаль? я с этим в Qt еще не полностью разобрался, подскажите, кто знает хорошо
«
Последнее редактирование: Февраль 01, 2011, 16:37 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...