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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:52:36