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

.NET Core中Decimal转Double与.NET 4.7.2结果不一致问题咨询

decimal转double在.NET Framework与.NET Core中结果差异的原因

这个差异源于两点:double类型的精度限制,以及两个框架在decimal转double时的实现逻辑不同。

  • double的精度本质限制:double是64位IEEE 754浮点数,仅能精确表示二进制分数的组合。10500000000这个十进制数无法被double精确存储,因为它的二进制展开是无限循环的,转换时必须舍入到最近的可表示double值。
  • 框架转换实现的更新:
    • .NET Framework 4.7.2采用的旧转换算法,在处理这类数值时,最终舍入到了直观的十进制整数值10500000000,但这并非严格符合IEEE 754标准的结果。
    • .NET Core(及后续.NET 5+)更新了转换逻辑,严格遵循IEEE 754的“最近舍入,偶数优先”规则,得到了真正最接近原decimal值的double表示——10499999999.999998(实际精确值为10499999999.999998181010596454143524169921875,格式化输出后显示为前者)。

简单来说,.NET Core的结果才是更符合浮点数标准的精确转换结果,而.NET Framework的旧实现做了偏向直观的近似处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:30:54