Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite如何存储十进制0.00和1.10而不是0和1.1?_Sqlite - Fatal编程技术网

SQLite如何存储十进制0.00和1.10而不是0和1.1?

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

这是我的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) 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