在这种情况下使用SQLite中的什么数据类型?

在这种情况下使用SQLite中的什么数据类型?,sqlite,Sqlite,考虑到下面的数字列表,我想在不同的环境中计算相同的公式,并希望它们接近,以下是我得出的结论: **Data** 0.884805739 0.579941876 0.707207324 0.076841269 **Excel** =SUM(C2:C5)/4 - MAX(C2:C5)/3 Result: 0.267263806 **SQLite** SELECT (SUM(A)/4) - (MAX(A)/3) FROM XL Result: 0.267263333 **C#** decimal

考虑到下面的数字列表,我想在不同的环境中计算相同的公式,并希望它们接近,以下是我得出的结论:

**Data**
0.884805739
0.579941876
0.707207324
0.076841269

**Excel**
=SUM(C2:C5)/4 - MAX(C2:C5)/3
Result:
0.267263806

**SQLite**
SELECT (SUM(A)/4) - (MAX(A)/3) FROM XL
Result:
0.267263333

**C#**
decimal d = ((0.884805739M+0.579941876M +0.707207324M+0.076841269M)/4M) - (0.884805739M/3M);
Result
0.2672638056666666666666666667
SQLite结果看起来与其他两个值明显不同。Sqlite中的列定义为十进制(15,9),我还使用数字和其他精度对其进行了测试。我知道十进制和数字在SQLite中被视为浮点,浮点并不精确,并且并非所有的十进制值都可以用二进制格式精确表示,这可能是造成此值差异的原因

我现在的问题是:
在SQLite中使用什么数据类型来生成接近Excel和/或C#的结果?Thx.

看起来您从SQLite获得了六位小数精度,这表明您使用的是32位版本。64位版本应返回接近0.2672638056667(精度的15位小数)的值


在SQLite中,无法通过使用不同的数据类型(类型关联)来修复此问题。您需要使用64位版本。

正如@CL所建议的,我使用的客户端软件没有准确地执行计算!我在Windows 32位计算机上切换到另一个客户端,得到的答案是:
0.267263805696402,这也接近@CL建议的SQL Fiddle计算的值267263805666667。但是,我不确定这两个答案为什么不同?

在SQlite中,我得到的值与在C#中的值相同(在Python中也是带浮点的相同值)。SQlite REAL是一个64位浮点(也称为双浮点),与Python中的相同。我怀疑十进制类型并没有造成您所看到的差异。我不确定还有什么会导致它?。SQLite值可能在插入或输出时被舍入。你用了什么软件?@CL,谢谢你的帮助,这是我使用的客户端。我检查了您的链接和另一个产生正确结果的客户端界面。如果你想把你的评论作为一个答案发表,我会这样做。再次谢谢。如果问题是你的软件,你必须自己写答案。