qt — const char *, чтобы удвоить проблему перевода с переполнением стека

У меня есть два примера приложений, использующих одну и ту же библиотеку, и основное различие между ними заключается в том, что одно использует qt, а другое — консольное приложение.

В общей библиотеке у меня есть этот тестовый код:

double test = 0.1;
double test2 = atof("2.13134");
double test3 = atof("1,12345");

Значения, если я использую приложение не-qt:

test = 0.10000000000001
test2 = 2.1323399999999999998
test3 = 1   // This is the expected result using a ',' as delimitation character

Но с приложением qt:

test = 0.10000000000001
test2 = 2     // This is not expected!!!
test3 = 1.1234500000000000001

Есть ли случай, когда поведение atof меняется из-за qt?

7

Решение

std::atof зависит от текущей установленной локали, чтобы сказать ей, какой символ является десятичной точкой. В случае по умолчанию («C locale») это символ точки ‘.».

Вполне вероятно, что Qt устанавливает локаль на что-то другое. Вы можете вернуть это, используя стандартный механизм C [++]:

std::setlocale(LC_ALL, "C");
7

Другие решения

Проблема, которую вы заметили, скорее всего, вызвана представлением Qt о локали. Ты можешь использовать:

QLocale::setDefault(QLocale::C);

заставить его работать как atof,

Обновить

Похоже на то QLocale::setDefault не устанавливает язык по умолчанию, используемый Qt. Он просто устанавливает локаль по умолчанию, которая будет создана при создании QLocale, Увидеть Изменение локали в Qt и принятый ответ для получения дополнительной информации.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector