Проблема решена, дело было в моей невнимательности (см. ниже)
Привет, ЛОР.
Встала казалось бы, банальная задача – выводить по результатам SQL-запроса числа, где число знаков после запятой всегда фиксировано, даже если это нули.
В официальной доке SQLite написано:
The format(FORMAT,…) SQL function works like the
sqlite3_mprintf()
C-language function and theprintf()
function from the standard C library.
Но при этом в сишечке я могу написать:
printf("%0.2f\n", 33.35);
printf("%0.2f\n", 44.);
И первое число выведется как 33.35
, а второе как 44.00
. Такой результат меня устраивает, и что-то подобное я хотел получить в SQLite.
Авотфиг.
select format(magicnumber/100.00, '%0.2f') from magictable;
(где magicnumber имеет тип integer) возвращает результат с ОДНИМ нулём. Т.е. если magicnumber равен 3845, то всё в порядке, в выводе будет 38.45. А вот если он равен 4200, то вывод даст 42.0 (один нуль вместо двух).
Ради справедливости надо отметить, что эксперимент у меня не совсем чистый, я SQLite дёргаю через QtSql. Но поскольку результатом format() уже является строка, я полагаю, что на результат это влиять не должно. Совсем чистым экспериментом было бы написать тестовую программу на голом libsqlite3-dev, но боюсь, чем колхозить такой тест, я скорее плюну и сделаю форматирование не в SQL а уже на стороне плюсов, в своём наследнике QSqlQueryModel – там понятно, как это делать, и там всё работает.
Но хочется всё-таки попробовать на стороне SQL… Куда копать?
lib32-sqlite 3.47.2-1
sqlite 3.47.2-1
Обновление Спасибо, оказалось, я тупо перепутал местами аргументы функции.