Russian Qt Forum
Март 28, 2024, 23:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Извлечение FLOAT значений из базы данных - ошибка  (Прочитано 9690 раз)
Yegor
Гость
« : Март 13, 2018, 20:20 »

Всем здравствуйте!

Использую mysql 5.7.21
OC - Linux Ubuntu 16.04.1
Qt 5.7.1

Есть таблица, в которой поле с типом float.

Извлекаю c помощью QSqlQuery значения из полей.
Код
C++ (Qt)
QSqlQuery query( QSqlDatabase::database("MyConName") );
query.exec(" SELECT myCol1, myCol2 FROM MyTable ");
bool ok=false;
while ( query.next() )
{
   const float myValue1 = query.record().value("myCol2").toFloat(&ok)
   if ( !ok )
       throw new Except("cannot extract 'myCol2'");
}

И при извлечения этого значения float (myCol2) бывает происходит ошибка ( ok == false). Причем она когда есть, а когда нет. Для тех же данных в той же таблице (таблица и ее данные не меняются). Например если запустить отладку программы, то все нормально. А если просто запустить (без отладки) ту же самую программу (тот же исполняемый файл), то работает с ошибками.
Нормально преобразовывает числа (операция toFloat(&ok)), у которых дробная часть - все нули, например, 112.000. И не может преобразовать, если дробная часть не нули, например, 112.23

Что это вообще может быть, где копать?

Спасибо!
« Последнее редактирование: Март 14, 2018, 20:24 от Yegor » Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #1 : Март 14, 2018, 11:25 »

Очень похоже что это связяно с настройками локали (системы, программы, БД).
То бишь с символом-разделителем дробной части. То есть toFloat ожидает что разделителем будет точка, а из БД приходит запятая, или наоборот.
Выведите строковое представление значения в консоль перед преоброзованием...
Записан
Yegor
Гость
« Ответ #2 : Март 14, 2018, 13:16 »

Цитировать
Выведите строковое представление значения в консоль перед преобразованием...

Вывел на консоль, вывод правильный. То есть, действительно, не настроена локаль.
А подскажите, пожалуйста, как локаль настраивать, для правильной интерпретации float (метод toFloat).

Как это делать в Qt? И есть ли настройка локали в MySQL?
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #3 : Март 14, 2018, 17:34 »

Насчет MySQL не скажу. А в Qt установить локаль для разделителя дробной части ака точка можно, например так:
Код
C++ (Qt)
QLocale::setDefault(QLocale::C);
 
Записан
Yegor
Гость
« Ответ #4 : Март 14, 2018, 20:24 »

Понятно. Спасибо большое за ответ!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.112 секунд. Запросов: 22.