用于存储小数的sqlite数据类型

83qze16e  于 2023-11-21  发布在  SQLite
关注(0)|答案(1)|浏览(197)

我想在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
我尝试做的是设置列类型为REALCURRENCYDECIMALDECIMAL(28,8)MONEY,似乎没有什么工作..我肯定知道,其他数据库,如sqlserver能够处理小数刚刚好..所以也许有什么我错过了与sqlite?
使用sqlite version 3.43.2
很抱歉,如果这个问题已经在某个地方得到了回答。我无法在stackoverflow上找到确切的答案。大多数答案/问题都是10年前的,但如果我错了,请给我指出正确的方向:)谢谢。

e1xvtsh3

e1xvtsh31#

虽然不直观,但我发现的唯一方法是将完整的十进制数存储为数据类型TEXT,并在代码中将其解析回十进制数。正如您所提到的,DECIMAL只有16位精度。TEXT将允许您将数字存储为具有更高精度的字符串。

相关问题