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

为何C#中Math.Round(6.665d,2)得6.66,而Math.Round(66.665d,2)得66.67?

为什么Math.Round的结果会有差异?

核心原因是double类型的二进制浮点数无法精确表示部分十进制小数,6.665d和66.665d在内存中的实际存储值和你写的字面量有细微偏差,这直接导致了四舍五入的结果不同:

  • 对于6.665d:它实际存储的值是略小于6.665的(比如约6.664999999999999),当用Math.Round保留两位小数时,这个值会被舍入为6.66。
  • 对于66.665d:它实际存储的值是略大于66.665的(比如约66.66500000000001),同样保留两位小数时,会被进一位得到66.67。

顺带提一句,Math.Round默认采用的是「银行家舍入法」(四舍六入五成双),但这里的结果差异本质不是舍入规则导致的,而是原始浮点数的精度误差。你可以通过输出更多小数位来验证这个偏差:

Console.WriteLine(6.665d.ToString("F15"));   // 输出:6.664999999999999
Console.WriteLine(66.665d.ToString("F15"));  // 输出:66.665000000000010

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:45:33