Math.Round Midpointrounding.RoundToeven to 2dp 为什么四舍五入到奇数
本文关键字:四舍五入 为什么 2dp Round Midpointrounding RoundToeven to Math | 更新日期: 2023-09-27 18:31:39
Math.Round(35.035, 2, MidpointRounding.ToEven) // returns: 35.03
据我了解,以上应该将数字四舍五入到小数点后两位。该数字介于两个数字35.03
和35.04
之间。
我所知,这意味着最后一个小数位应该是偶数,所以我希望它四舍五入到最接近的,即使35.04
.
有人可以向我解释为什么它在小数点后最后一位四舍五入到奇数吗?
当你表示小数时,你需要m
或M
,否则会导致近似误差。
试试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;
请看,http://msdn.microsoft.com/en-us/library/f5898377.aspx
在那里,您可以找到以下内容:
来电者注意事项
由于将十进制值表示为浮点数或对浮点值执行算术运算可能会导致精度损失,因此在某些情况下,Round(Double、Int32、MidpointRounding) 方法可能不会显示为舍入 mode 参数指定的中点值。以下示例对此进行了说明,其中 2.135 四舍五入为 2.13 而不是 2.14。发生这种情况是因为该方法在内部将值乘以 10 位数字,并且在这种情况下的乘法运算会丢失精度。
使用带有十进制作为第一个值的 Math.Round 可以解决此问题,但需要支付类型转换的成本。