使用SQLiteDataReader读取SQLite数据库数值不准确问题求助
解决SQLiteDataReader读取REAL类型数值不准确的问题
这种小数读取后变成整数的情况我之前踩过坑!大概率是区域文化设置导致的解析错误,或者是用了不合适的转换方式,我给你几个靠谱的解决办法:
1. 用不变区域文化(InvariantCulture)转换
你的例子里important_value_2的值是-0,000158976621370616(逗号做小数点),如果你的程序运行环境的区域设置是用点.做小数点,Convert.ToDouble会错误解析这个字符串,只保留整数部分。改成指定InvariantCulture就能解决:
// 记得先引用 using System.Globalization; public MyObject(SQLiteDataReader reader) { ImportantValue1 = Convert.ToDouble(reader["important_value_1"], CultureInfo.InvariantCulture); ImportantValue2 = Convert.ToDouble(reader["important_value_2"], CultureInfo.InvariantCulture); Note = reader["note"].ToString(); }
2. 用强类型的GetDouble方法(更推荐)
SQLiteDataReader本身提供了强类型的读取方法,不需要经过字符串转换,能彻底避免区域解析问题,而且效率更高:
public MyObject(SQLiteDataReader reader) { // 先通过字段名获取索引,避免硬写索引的风险 int value1Ordinal = reader.GetOrdinal("important_value_1"); int value2Ordinal = reader.GetOrdinal("important_value_2"); ImportantValue1 = reader.GetDouble(value1Ordinal); ImportantValue2 = reader.GetDouble(value2Ordinal); Note = reader["note"].ToString(); }
额外排查建议
- 先确认数据库里的数值确实是正确存储的:用DB Browser for SQLite这类工具打开数据库,直接查看
important_value_1和important_value_2的实际值,确保不是插入时就存成了整数。 - 如果是插入数据时出的问题,也要注意插入时用强类型参数,不要直接拼接字符串,避免同样的区域问题。
内容的提问来源于stack exchange,提问作者YetiTheDev
相关产品推荐
相关产品推荐

