You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLite .NET存储double.MaxValue后读取变为正无穷的问题

解决SQLite存储double.MaxValue后读取为PositiveInfinity的问题

这个问题我之前也碰到过,核心原因是直接拼接SQL字符串传递数值导致的。当你把double.MaxValue转换成字符串(比如1.7976931348623157E+308)拼进SQL语句时,SQLite在解析这个字符串的过程中,会因为数值的文本解析逻辑,误将其判定为超出双精度浮点数的范围,最终存储成了PositiveInfinity。

解决方法其实很简单,改用参数化查询即可,让SQLite.NET库直接处理数值的二进制传递,跳过字符串转换的环节:

// 创建表t1 (value REAL)
// ... 已完成数据库连接

// 改用参数化SQL,避免直接拼接数值字符串
var sql = "insert into t1(value) VALUES (@value)";
using (var command = new SQLiteCommand(sql, con))
{
    // 直接传递double类型的参数,无需转换为字符串
    command.Parameters.AddWithValue("@value", double.MaxValue);
    command.ExecuteNonQuery();
}

这样修改后,SQLite会准确存储double.MaxValue的二进制值,后续执行查询读取时:

// SELECT * FROM t1
// ... 执行查询操作
var d = reader.GetDouble(0);
// d 将正确等于 double.MaxValue

额外提一句:参数化查询不仅能解决这个数值精度/范围的问题,还能避免SQL注入风险,是数据库操作的最佳实践哦。

内容的提问来源于stack exchange,提问作者Simon Goodman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:59:46