Название: число с 5 знаками после запятой Отправлено: mokynis от Ноябрь 19, 2013, 17:51 вопрос, наверное, дурацкий, но все же... Имеется таблица в базе MySql, в ней поле Decimal(10,6). В MySql Query Browser'е все отображается правильно, но когда в программе делаю query.exec("SELECT kolvo FROM tab"), query.value(0) показывает мне, что поле это Double. Все бы хорошо, но если в этом поле лежит что-то вроде 0.00005, то
Код: qDebug()<<qry.value(0).toDouble()<<","<<qry.value(0).toFloat()<<","<<qry.value(0).toString()<<","<<qry.value(0).toReal(); Название: Re: число с 5 знаками после запятой Отправлено: mutineer от Ноябрь 19, 2013, 18:01 5e-05 это и есть 0.00005, только в экспоненциальной форме записи. Искать тебе надо как это в нужном виде вывести куда там тебе надо
Название: Re: число с 5 знаками после запятой Отправлено: mokynis от Ноябрь 19, 2013, 20:47 так я об этом и спрашиваю. Qt-программы, похоже, все в экспотенциальной форме отображают данные с больше, чем 4 знаками после запятой. Я TOra использую для просмотра баблиц базы-она тоже 5e-05 показывает, а запрос непосредственно в MySql-строке выдает 0.00005. Так что
Цитировать Как заставить запрос вернуть мне то, что лежит в базе, а не степень числа? Название: Re: число с 5 знаками после запятой Отправлено: mutineer от Ноябрь 19, 2013, 21:54 Еще раз - запрос возвращает тебе то, что лежит в базе. Ты не так выводишь и тут все зависит от способа, которым ты переводишь double в строку.
Например, если ты используешь QString::number(double n, char format = 'g', int precision = 6), то нужно вторым параметром передать 'f', чтобы выводилось всегда в десятичном виде Название: Re: число с 5 знаками после запятой Отправлено: mokynis от Ноябрь 20, 2013, 09:28 именно то, что надо! Спасибо. Надо было мне лучше Help читать :-(
Название: Re: число с 5 знаками после запятой Отправлено: GUVadim от Ноябрь 28, 2016, 12:24 В продолжении темы...
Конвертировал ПО с QT 4.7.8 MinGW x32 на QT 5.6.0 MinGW x32 БД на MySQL 5.1. В таблице есть поля DOUBLE(11.2) и TINYINT(3). Запрашиваю их и заливаю в лист. Но при запросе выводит не то что надо... Код: QSqlQuery query; Цитировать DOUBLE(11.2) - "6924483.1900000004" Цитировать TINYINT(3) - "\u0004" (Это цифра 4)Всё конечно можно исправить для DOUBLE(11.2) - QString::number(query.value(0).toDouble(),'f',2) а для TINYINT(3) - QString::number(query.value(1).toInt()). !Но в коде дохрена аналогичных запросов (около 3 тыщ.). Пробовал разные драйвера для MySQL, а так же тестировал на сервере версии 5.7, толку нет. Подскажите пожалуйста как сделать вывод привычным для QT 4.7.8, есть ли какая-то инъекция для выздоровления? Название: Re: число с 5 знаками после запятой Отправлено: Johnik от Ноябрь 28, 2016, 12:50 Подскажите пожалуйста как сделать вывод привычным для QT 4.7.8, есть ли какая-то инъекция для выздоровления? В коде драйвера смотрим: Код И видим, что конвертится в double, отсюда и проблемы, делайте конвертацию в строку средствами базы данных. Название: Re: число с 5 знаками после запятой Отправлено: GUVadim от Ноябрь 28, 2016, 15:07 И видим, что конвертится в double, отсюда и проблемы, делайте конвертацию в строку средствами базы данных. За молниеносный ответ спасибо! )В каком драйвере такое можно найти? Штатная Qt'эшная библитека? Про дробь понятно, а что делать с целым числом которое выводится символьно? И наконец как сдлеть эту конвертацию средствами БД? Мускуле есть функция конвертации, но дробь в строку она не конвертирует (CAST). Всё было бы ничего, если бы кода было пару строк, но такого кода много. Название: Re: число с 5 знаками после запятой Отправлено: Johnik от Ноябрь 28, 2016, 15:45 В каком драйвере такое можно найти? Штатная Qt'эшная библитека? Код что я привел, тут (относительно корня исходников Qt): src/qtbase/src/sql/drivers/mysql/qsql_mysql.cppПро дробь понятно, а что делать с целым числом которое выводится символьно? Цитата: GUVadim TINYINT(3) - "\u0004" попробуйте так:query.value(1).toInt() И наконец как сдлеть эту конвертацию средствами БД? Мускуле есть функция конвертации, но дробь в строку она не конвертирует (CAST). если только для вывода, то query.value(0).toString()Всё было бы ничего, если бы кода было пару строк, но такого кода много. иначе искать/писать свой Decimal Название: Re: число с 5 знаками после запятой Отправлено: GUVadim от Ноябрь 28, 2016, 16:50 Код что я привел, тут (относительно корня исходников Qt): src/qtbase/src/sql/drivers/mysql/qsql_mysql.cpp Да, с TINYINT согласен, почему-то переделали в чар этот тип.Это qsql_mysql.cpp Qt 4.8.7 Код А это уже Qt 5.6.0 Код А вот с дробью не понятно, код остался прежним. --- Qt 4.8.7 Код --- Qt 5.6.0 Код Дурдом... А хотелось всего-то прицепить внешнюю библиотеку для экспорта в xlsx, т.к. заточена она ток под Qt 5+ ( Название: Re: число с 5 знаками после запятой Отправлено: Johnik от Ноябрь 28, 2016, 16:59 Дурдом... А хотелось всего-то прицепить внешнюю библиотеку для экспорта в xlsx, т.к. заточена она ток под Qt 5+ ( Что непонятно?Decimal в БД - тип с фиксированной точкой; double - с плавающей. Конвертация происходит не точно. Название: Re: число с 5 знаками после запятой Отправлено: GUVadim от Ноябрь 28, 2016, 17:04 Дурдом... А хотелось всего-то прицепить внешнюю библиотеку для экспорта в xlsx, т.к. заточена она ток под Qt 5+ ( Что непонятно?Decimal в БД - тип с фиксированной точкой; double - с плавающей. Конвертация происходит не точно. Дело в том что в Qt 4.8.7 Double бралось нормально. Название: Re: число с 5 знаками после запятой Отправлено: lit-uriy от Декабрь 02, 2016, 12:08 >>Дело в том что в Qt 4.8.7 Double бралось нормально.
А что значит нормально, какое значение и куда выводилось раньше, какое значение при этом было в БД. Как стало теперь? Дебаг не в счёт, он иногда всякую вспомогательную фигню может писать Название: Re: число с 5 знаками после запятой Отправлено: GUVadim от Февраль 21, 2017, 11:34 Изваняюсь за оффтоп..
>> что значит нормально, какое значение и куда выводилось раньше, какое значение при этом было в БД. Производился запрос к БД на мускуле к полям DOUBLE(10.2), потом вытаскивал значение в строку для табличного вида (QTableView) - query.value(0).toString(). В Qt 4.8.7 два знака после запятой выводилось, а в Qt 5.6.0 строка стала выводится с множеством цифр после запятой. Решение с этой бедой сделал только одно QString::number(query.value(0).toDouble(),'f',2). Пришлось лопатить весь код, но даже ещё не всё поправлено. Исправляю по мере обращения пользователей. Tinyint пришлось в БД конвертировать в smallint и вывод стал нормальным, цифровым, а не символьным. На этом вся борьба и закончилась. |