我想在sqlite
中存储加密货币财务数据,但我无法弄清楚数字的精度是如何处理的。加密精度/规模可以低至8位数,而真实的数字部分为10-12位数。即。以下数字是可能的: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
s最多可以有28位长。根据C#
datatypes,这16位实际上与double
数据类型相关,而不是decimal
。
我尝试做的是设置列类型为REAL
,CURRENCY
,DECIMAL
,DECIMAL(28,8)
,MONEY
,似乎没有什么工作..我肯定知道,其他数据库,如sqlserver能够处理小数刚刚好..所以也许有什么我错过了与sqlite?
使用sqlite version 3.43.2
很抱歉,如果这个问题已经在某个地方得到了回答。我无法在stackoverflow
上找到确切的答案。大多数答案/问题都是10年前的,但如果我错了,请给我指出正确的方向:)谢谢。
1条答案
按热度按时间e1xvtsh31#
虽然不直观,但我发现的唯一方法是将完整的十进制数存储为数据类型
TEXT
,并在代码中将其解析回十进制数。正如您所提到的,DECIMAL
只有16位精度。TEXT
将允许您将数字存储为具有更高精度的字符串。