GRDB SQLite筛选中整数除法问题:如何正确对比错误率阈值?
解决GRDB查询错误占比超阈值词汇的问题
你当前的代码逻辑存在两个问题:一是计算的是正确占比小于阈值,虽然数学上等价于错误占比大于阈值,但逻辑表达不直观;二是未处理timesSeen = 0的情况,这类从未被测试的词汇会因除以零的计算问题被误纳入结果。
修正后的代码直接计算错误占比,并过滤掉无测试记录的词汇:
func getIncorrectWords(db: GRDB.Database, threshold: Double) throws -> [Word] { let timesSeen = Column("timesSeen") let timesCorrect = Column("timesCorrect") // 错误占比 = (总测试次数 - 正确次数) / 总测试次数 let errorRate = (timesSeen - timesCorrect) / timesSeen return try words .filter(timesSeen > 0) // 排除无测试记录的词汇 .filter(errorRate > threshold) // 筛选错误占比超过阈值的词汇 .fetchAll(db) }
关键说明:
- 先通过
timesSeen > 0过滤,避免出现除以零的运算错误,同时排除没有测试数据的无效词汇。 - 直接计算错误占比
(timesSeen - timesCorrect) / timesSeen,与阈值对比,逻辑更清晰,完全匹配你“错误猜测占比超过特定阈值”的需求。 - 若阈值为百分比数值(如错误率超过50%),传入
0.5即可。
内容的提问来源于stack exchange,提问作者citelao
相关产品推荐
相关产品推荐

