【问题标题】:SQLite data results round off decimals in .NET, shows correct results in DB Browser for SQLiteSQLite 数据结果在 .NET 中四舍五入,在 SQLite 的 DB 浏览器中显示正确的结果
【发布时间】:2019-07-23 19:35:39
【问题描述】:

我在我的 WPF 应用程序中使用 SQLite 的 .NET 数据连接器运行查询,与在 SQLite 的 DB Browser 中运行相同的精确查询相比,它显示了不同的结果。 DB Browser 的结果是正确的。基本上小数点在 WPF 应用程序中会四舍五入。

SQL 查询:

SELECT IFNULL(SUM(qty), 0) AS qty, IFNULL(SUM(amount), 0) AS amount, IFNULL(SUM(fat*qty), 0) AS avgfat, IFNULL(SUM(snf*qty), 0) AS avgsnf, IFNULL(SUM(pd1amount+pd2amount+pd3amount), 0) AS pd, IFNULL(COUNT(shift+Date), 0) AS shiftcount, milktype, ledgerid, ledgeralias, ledgername 
FROM vouchercollections 
WHERE ledgeralias>=1 AND ledgeralias<=100 AND membertype<>'C' 
AND date>='2019-07-25 00:00:00' AND date<='2019-07-25 23:59:59'
GROUP BY milktype, ledgerid, ledgeralias, ledgername 
ORDER BY ledgeralias, milktype desc

DataTable 中的数据可视化工具中的结果。在这个阶段没有发生手动数据操作,这些是直接从查询到 DataTable 的结果。

来自 SQLite 数据库浏览器的结果

如果您查看第 1 行。 2 和 3,DataTable 中的数量为 6 和 12,DB Browser for SQLite 中的数量为 5.5 和 12.5。

可能出了什么问题?

2019-07-25 更新:看来如果查询的第一个结果是小数,则整个返回的表都是正确的。但是,如果第一个结果是整数,则整个结果集都是整数。

【问题讨论】:

  • 数据表中qty列的类型是什么?
  • 数字。虽然 SQLite 似乎不太关心数据类型。例如,您可以将文本保存在整数字段中!

标签: wpf sqlite datatable


【解决方案1】:

我确认您的更新:这取决于查询返回的第一个值! 这是一种痛苦。

到目前为止,我发现的唯一解决方法是强制使用 a : 1.00 * field

在您的示例中:"SELECT IFNULL(SUM(1.00 * qty), 0) AS qty" 应该可以工作。

如果有人有更系统的解决方案,我很感兴趣。

【讨论】:

  • 感谢您的确认。我将测试您的解决方案并发布结果。
猜你喜欢
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多