我目前正在处理以下代码:
for (double i = 0.00; i < 5; i += 0.01)
{
cmd.CommandText = "SELECT " +
"COUNT(DISTINCT(ActualAFR)) " +
"FROM tblBaseLog AS tBL " +
"INNER JOIN tblSettings AS tSET " +
"ON tBL.RPM = tSET.RPM " +
"WHERE MAFVoltage = " + i + " AND " +
"(tBL.AccelPedalPos > tSET.APPTransition OR " +
"tBL.CalculatedLoad > tSET.LoadTransition)";
int trimCount = Convert.ToInt32(cmd.ExecuteScalar().ToString());
我遇到的问题特定于查询最后一行的 WHERE 子句比较(特别是 tBL.CalculatedLoad > tSET.LoadTransition)。
这个查询从我现有的数据集中返回一个结果;这个结果是正确的,但不是预期的完整数据集。
如果我翻转操作数(从大于到小于),我会得到预期但未经验证的结果(基本上是很多数据点)。
最奇怪的是,如果我以更高的值开始 for 循环(对于 double i = 4.00;...等),我会得到比以前更多的结果。
现在我已经澄清了正在发生的事情,以下是与正在使用的数据库的结构/内容有关的相关信息:
所有的表数据类型都设置为 REAL,除了 RPM,它只是一个普通的 INTEGER。
tBL.AccelPedalPos > tSET.APPTransition 的结果将永远不会返回为真(不要问,此时没关系,是的,我已将其从查询中删除但无济于事)所以它不是一个因素
tSET.LoadTransition 的值几乎总是 1,除了在日志的早期它是 1.1
tBL.Calculated Load 的值在 0.2 和 2 之间变化,有数百次迭代的十进制值大于它应该与之比较的平坦 1.0。
我想念的东西可能非常简单,但是在重写了几十次查询之后,我崩溃了,在这里寻求帮助。
还可能值得注意的是,我的计算机具有“固定”的 AMD TLB 错误处理器之一;但是,我已经在运行 Core 2 Duo 的笔记本电脑上测试了该应用程序的编译版本,结果完全相同。
任何输入将不胜感激。