提问人:Alex 提问时间:11/1/2023 更新时间:11/1/2023 访问量:23
用于存储小数的 SQLite 数据类型
sqlite datatype for storing decimals
问:
我想将加密货币财务数据存储在 中,但无法弄清楚如何处理数字的精度。加密精度/刻度可以低至 8 位,实数部分可以低至 10-12 位。即以下数字是可能的:sqlite
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 位数字。为什么只存储 16 位数字?sqlite
我计划将它与 一起使用,其中 s 最多可达 28 位数字。这 16 位数字实际上与数据类型相关,而不是根据 数据类型。C#
decimal
double
decimal
C#
我尝试做的是将列类型设置为,,,,,,似乎没有任何效果。我确信其他数据库(例如sqlserver)能够很好地处理小数。所以也许我在sqlite中缺少一些东西?REAL
CURRENCY
DECIMAL
DECIMAL(28,8)
MONEY
用sqlite version 3.43.2
如果这个问题在某个地方得到回答,我很抱歉。我无法找到确切的答案。大多数答案/问题都是 10 年前的,但如果我错了,请指出我正确的方向:)谢谢。stackoverflow
答:
1赞
brett_0267
11/1/2023
#1
虽然不直观,但我发现解决这个问题的唯一方法是将完整的十进制数存储为数据类型,并在代码中将其解析回十进制。正如您提到的,只有 16 位精度。 将允许您以更高的精度将数字存储为字符串。TEXT
DECIMAL
TEXT
评论
0赞
Alex
11/9/2023
似乎 dapper 开箱即用地支持 TEXT 字段。这意味着在从/向数据库读取数据时,我不需要编写单独的 TEXT 到 NUMBER 转换器。相当方便。谢谢你的帮助。我最终按照您的建议使用了文本字段。
评论