如何使插入的数据在小数部分4位?

时间:2014-05-30 02:59:30

标签: sqlite

我用

创建了一个数据库
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插入测试表?

1 个答案:

答案 0 :(得分:1)

根据SQLite DocumentationDECIMAL(M,N)数据类型实际上将存储为NUMERIC,它将由SQLite引擎转换,因为它认为适合优化存储。

由于您输入的是浮点值,因此SQLite可能会存储它,并且由于浮点值无法准确表示某些值,因此最终会得到近似值。

如果必须以一定的精度精确存储值,则有三个选项:

  1. 使用ROUND函数:INSERT INTO test SELECT ROUND(89.56/3, 4),它将舍入到4位小数。
  2. 使用STRING数据类型。 SQLite会自动将其转换为NUMERIC进行数学运算。
  3. 使用INTEGER数据类型,并存储所有值乘以10 000,即。 29.8533 => 298533.然后,当您检索值以将其转换为适当的大小时,您可以再次进行分割。