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

问题描述 投票:0回答:1

我想将加密货币财务数据存储在

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 年前的,但如果我错了,请指出我正确的方向:) 谢谢。

sqlite floating-point decimal sqldatatypes
1个回答
0
投票

虽然不直观,但我发现的唯一解决方法是将完整的十进制数存储为数据类型

TEXT
,然后在代码中将其解析回十进制。正如您提到的,
DECIMAL
只有 16 位精度。
TEXT
将允许您以更高的精度将数字存储为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.