【问题标题】:Math.Round Midpointrounding.RoundToEven to 2dp why is it rounding to oddMath.Round Midpointrounding.RoundToEven 到 2dp 为什么它舍入到奇数
【发布时间】:2013-09-17 18:37:53
【问题描述】:
Math.Round(35.035, 2, MidpointRounding.ToEven) // returns: 35.03

据我了解,以上内容应将数字四舍五入到小数点后两位。该数字介于两个数字35.0335.04 之间。

因此,据我所知,我指定舍入为偶数,这意味着最后一个小数位应该是偶数,所以我希望它会舍入到最接近的甚至是35.04

有人可以向我解释为什么它在小数点后四舍五入到奇数吗?

【问题讨论】:

标签: c# math


【解决方案1】:

表示小数时需要mM,否则会导致近似错误。

试试Math.Round(35.035m, 2, MidpointRounding.ToEven)

不同数据类型的后缀

float f = 1.2f;
double d = 1.2d;
uint u = 2u;
long l = 2L;
ulong ul = 2UL;
decimal m = 2m;

【讨论】:

    【解决方案2】:

    请看,http://msdn.microsoft.com/en-us/library/f5898377.aspx

    你会发现以下内容:

    来电者须知

    由于将十进制值表示为浮点数或对浮点值执行算术运算可能导致精度损失,在某些情况下,Round(Double, Int32, MidpointRounding) 方法可能无法对中点进行舍入由 mode 参数指定的值。这在以下示例中进行了说明,其中 2.135 舍入为 2.13 而不是 2.14。发生这种情况是因为该方法在内部将值乘以 10 位,并且这种情况下的乘法运算会损失精度。

    使用带小数的 Math.Round 作为第一个值可以解决问题,但会产生类型转换的成本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      相关资源
      最近更新 更多