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

Float转Double转换数据异常:EF读取数据库值不符的解决方法

问题解决思路

原因分析

SQL中的float是32位单精度浮点数,它存储的是二进制近似值,你在数据库中看到的1.36241638169457只是该二进制值的十进制近似显示。而.NET的double是64位双精度浮点数,当EF把32位float转换为double时,会完整还原float的二进制精确值,转换为十进制后就会出现额外的小数位(即1.3624163816945734)。

解决方法

1. 格式化输出匹配显示需求

如果只是需要和数据库显示的格式一致,读取后对double值进行格式化处理:

  • 格式化字符串:使用value.ToString("F14"),直接将值格式化为14位小数的字符串。
  • 数值截断/四舍五入:使用Math.Round(value, 14),将数值保留14位小数,得到与数据库显示一致的数值。

2. 统一数据类型从根源避免差异

  • 改用精确小数类型:将数据库字段类型改为decimal(或numeric),EF中对应属性使用decimal类型。decimal是精确十进制类型,能精准存储指定的小数数值,完全避免浮点数的近似问题,适合对精度要求高的场景(如金额、精确计量数据)。
  • 保持单精度类型一致:如果必须使用float类型,将EF中的属性类型改为float(即.NET的Single类型),读取时直接以单精度存储,不会出现额外小数位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:42:07