我想将加密货币财务数据存储在
sqlite
中,但无法弄清楚如何处理数字的精度。加密精度/范围可以低至 8 位,而实数部分为10-12 位数字。 IE。可以使用以下号码:123456789111.12345678
如果我们初始化一个包含记录的表:
PRAGMA journal_mode=WAL;
PRAGMA foreign_keys = ON;
CREATE TABLE datas (
id INTEGER PRIMARY KEY AUTOINCREMENT,
price decimal NOT NULL
);
insert into datas (price) values (123456789111.12345678);
则插入的记录将四舍五入为
123456789111.12346
。
123456789111.12346
只是 一个 16 位数字。输入的是 20 位数字。 为什么 sqlite
只存储 16 位数字?
我计划将其与
C#
一起使用,其中 decimal
的长度可达 28 位数字。根据 double
datatypes,这 16 位数字实际上与
decimal
数据类型相关,而不是 C#
。
我尝试做的是将列类型设置为
REAL
,CURRENCY
,DECIMAL
,DECIMAL(28,8)
,MONEY
,似乎没有任何作用。我确信其他数据库(例如sqlserver)可以处理小数就好了..所以也许我在 sqlite 中缺少一些东西?
使用
sqlite version 3.43.2
如果问题已在某处得到解答,我很抱歉。我无法在
stackoverflow
上找到确切的答案。大多数答案/问题都是 10 年前的,但如果我错了,请指出我正确的方向:) 谢谢。
虽然不直观,但我发现的唯一解决方法是将完整的十进制数存储为数据类型
TEXT
,然后在代码中将其解析回十进制。正如您提到的,DECIMAL
只有 16 位精度。 TEXT
将允许您以更高的精度将数字存储为字符串。