鉴于以下数字列表,我想在不同的环境中计算相同的公式,并希望它们接近,这就是我想出的:
**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中的列定义为Decimal(15,9),我还使用NUMBER和其他精度对其进行了测试。我知道在SQLite中Decimal和Number被视为FLOAT,并且FLOAT不精确,并且并非所有十进制值都能以二进制格式准确表示,这可能是造成这种差异的原因。
我现在的问题是: 在SQLite中使用什么数据类型来生成接近Excel和/或C#的结果? THX。
答案 0 :(得分:0)
看起来你从SQLite得到了六位小数的精度,这表明你使用的是32位版本。 64位版本应该返回一个更接近0.267263805666667的值(精度的15位小数)。
您无法使用其他数据类型(类型亲缘关系)在SQLite中解决此问题。您需要使用64位版本。
答案 1 :(得分:0)
正如@CL所建议的那样,我使用的客户端软件没有准确地执行计算!我在Windows 32位机器上切换到另一个客户端,得到的答案是: 0.2672638056 96402也接近由@CL建议的SQL Fiddle计算的值 2672638056 66667。但是,我不确定为什么这两个答案不同?