我用
创建了一个数据库sqlite3 e:\\tmp.db
并创建我的表格。
create table test(value decimal(8,4))
当我插入数据时,数据将包含小数部分的多个数字而不是4。
insert into test select 89.56/3 ;
select * from test
我得到一个号码:29.853333333333335
,如何将29.8533插入测试表?
答案 0 :(得分:1)
根据SQLite Documentation,DECIMAL(M,N)
数据类型实际上将存储为NUMERIC
,它将由SQLite引擎转换,因为它认为适合优化存储。
由于您输入的是浮点值,因此SQLite可能会存储它,并且由于浮点值无法准确表示某些值,因此最终会得到近似值。
如果必须以一定的精度精确存储值,则有三个选项:
ROUND
函数:INSERT INTO test SELECT ROUND(89.56/3, 4)
,它将舍入到4位小数。STRING
数据类型。 SQLite会自动将其转换为NUMERIC
进行数学运算。INTEGER
数据类型,并存储所有值乘以10 000,即。 29.8533 => 298533.然后,当您检索值以将其转换为适当的大小时,您可以再次进行分割。