SQLite如何存储十进制0.00和1.10而不是0和1.1?
这是我的SQLite查询:SQLite如何存储十进制0.00和1.10而不是0和1.1?,sqlite,Sqlite,这是我的SQLite查询: CREATE TABLE IF NOT EXISTS `accounts` (id INTEGER NOT NULL, price DECIMAL(10,2) default 0.00);", conn); 我希望避免保存0而不是0.00或1.1而不是1.10。在SQLite中可以吗?您有一个十进制数据类型,最多可以存储两个十进制数字 插入数据时,可以忽略非有效数字。以下命令是等效的: insert into accounts (id, price) va
CREATE TABLE IF NOT EXISTS `accounts` (id INTEGER NOT NULL, price DECIMAL(10,2) default 0.00);", conn);
我希望避免保存0而不是0.00或1.1而不是1.10。在SQLite中可以吗?您有一个十进制数据类型,最多可以存储两个十进制数字 插入数据时,可以忽略非有效数字。以下命令是等效的:
insert into accounts (id, price) values (1, 1.1);
insert into accounts (id, price) values (1, 1.10);
SQLite以一种您不必担心的内部格式存储它。在
select
查询中读取该值时,可以根据需要对其进行格式化。在SQLite中没有DECIMAL
数据类型,您可以在这里找到:。通过将列
price
定义为DECIMAL(10,2)
,您只需将其关联性定义为NUMERIC
,但这并不意味着您将存储的数值精度为小数点后两位。您可以在该列中存储任何内容,甚至字符串。
使用函数
printf()
查询表时,可以设置数字格式:
或将列重新定义为文本
:
CREATE TABLE IF NOT EXISTS `accounts` (id INTEGER NOT NULL, price TEXT DEFAULT '0.00');
并存储如下值:
INSERT INTO accounts(id, price) VALUES
(1, printf("%.2f", 1.1)),
(2, printf("%.2f", 1000));
但是,当您想要聚合或进行任何类型的数值计算时,例如:
SELECT SUM(price) FROM accounts
或
您仍然需要使用printf()
格式化结果:
SELECT printf("%.2f", SUM(price)) FROM accounts
或
我认为这样存储对于文本类型的值是可能的,但是对于数字类型的值没有意义。你的意思是显示为这样的格式吗?是的,我知道,但我用datagridview表示数据(例如,我需要1000的总和表示为1000.00),用户可以编辑这些数字。。。。所以我想避免编写额外的代码,只是为了用.00或.10。。。如果sqlite提供的话。MySql中的相同代码工作正常,始终存储2个十进制数字,即使它们是0。顺便说一句,我的代码中有很多计算和排序,所以不能将这些数据存储到字符串中
SELECT 1.1 * price FROM accounts
SELECT printf("%.2f", SUM(price)) FROM accounts
SELECT printf("%.2f", 1.1 * price) FROM accounts