Делаю вывод типа qInfo() << query.value(0)
1) Делаю локаль с разделителем
, (раскоментирую в исходниках первый блок, комментирую второй). Выводит:
Decimal point: ','
Result:
QVariant(double, 1)
QVariant(Invalid)
QVariant(Invalid)
2) Делаю локаль с разделителем
. (раскоментирую в исходниках второй блок, комментирую первый). Выводит:
Decimal point: '.'
Result:
QVariant(double, 1)
QVariant(Invalid)
QVariant(Invalid)
3) Вообще не устанавливаю локаль (коментирую 2 блока)
Вывод:
Decimal point: '.'
Result:
QVariant(double, 1)
QVariant(Invalid)
QVariant(Invalid)
То есть не зависит от разделителя.
Далее я экспериментировал со структурой таблицы в mysql. Сделал тип столбца не float, a float (6,2).
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| my_float | float(6,2) | YES | | NULL | |
+----------+------------------+------+-----+---------+----------------+
И вывод программы в таком случае (с разными комбинациями локалей) одинаковый -
Result:
QVariant(Invalid)
QVariant(Invalid)
QVariant(Invalid)
То есть вообще числа не распознаются.
Далее я экспериментировал, изменил структуру таблицы, вместо float сделал varchar(10).
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| my_float | varchar(10) | YES | | NULL | |
+----------+------------------+------+-----+---------+----------------+
В таком случае все считывается нормально. Не зависимо от локали.
Если выводить с помощью
qInfo() << record(0), то вывод:
Result:
QVariant(QString, "1.00")
QVariant(QString, "1.01")
QVariant(QString, "0.02")
А если через QRecord и конвертировать (во float)
qInfo() << query.record().value(0).toFloat()Result:
Как вы думаете, почему
не работает вывод, если
тип столбце таблицы - float (да и double тоже)?
И хороршая ли практика, если столбец вместо float делать varchar?