CREATE TABLE "Test" ("ItemQty" DOUBLE NOT NULL );
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Insert Into Test VALUES (1.4);
Select Sum(ItemQty)
From Test;
Resultado: 15,400000000000002
Deve ser 15,4
O tipo DOUBLE é um tipo de ponto flutuante representado em binário internamente. Números de ponto flutuante binários produzirão "erros de arredondamento" quando convertidos para base 10. Se você quiser cálculos numéricos precisos com um ponto decimal, você terá que usar o tipo NUMERIC ou DECIMAL .
Para ajudá-lo a entender por que os tipos de ponto flutuante têm erros de arredondamento ao converter para a base 10, consulte este artigo:
https://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples
Além disso, apenas para sua referência, os tipos NUMERIC ou DECIMAL serão ordens de magnitude mais lentas nos cálculos em comparação com o tipo DOUBLE .
Consulte também Tipos de dados no SQLite .
select printf('%.2d',Sum(ItemQty))
deve fazer o trabalhoVeja também a função principal printf()