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

.NET Core 3.1中ToString舍入行为变更的原因是什么?

差异原因解析

这个输出差异来自.NET Core 3.0及后续版本对浮点格式化逻辑的两项关键改进:

  • 精确基于浮点实际存储值舍入
    1.95无法用二进制浮点数(double类型)精确表示,实际存储的double值是一个略小于1.95的数值(约为1.949999999999999956)。
    .NET Framework 4.7.2的格式化逻辑会先将浮点值转换为十进制字符串,此过程中可能把这个略小的数值近似显示为"1.95",之后对字符串舍入得到"2.0"。
    而.NET Core 3.1采用了新算法,直接基于浮点值的二进制存储内容判断舍入方向,准确识别该值略小于1.95,因此保留一位小数时结果为"1.9"。

  • 生成最短唯一标识的十进制字符串
    .NET Core 3.0之后的浮点格式化会生成能唯一对应原浮点值的最短十进制字符串,同时严格遵循舍入规则。旧版本的中间转换步骤容易引入精度误差,新算法彻底避免了这个问题,确保舍入结果匹配浮点值的真实数学大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:55:27