为什么在 c# 2.135 中总是四舍五入(使用 2 位小数)到 2.13
本文关键字:使用 小数 为什么 四舍五入 | 更新日期: 2023-09-27 18:33:08
使用 Math.Round(doubleValue, 2)
//Toeven 时
//2.135 --> 2.13 为什么不是 2.14?
//3.135 --> 3.14
当在 2.13 使用 AwayFromZero 2.135 轮时,为什么不是 2.14?
要回答标题中的问题:
2.135 并不总是四舍五入(使用 2 位小数)到 2.13,这只是发生在您的情况下,因为您使用的是二进制浮点数据类型。(正如 leppie 指出的那样,2.135 不能准确地表示为双精度,另请注意,Microsoft似乎在 decimal
和 floating point types
之间不诚实,即使十进制也符合定义)
但是,如果您使用 decimal
作为数据类型,您将在舍入中具有一致的行为,您可以比较此代码段的不同输出以验证:
decimal val1 = 2.135m;
decimal val2 = 3.135m;
Console.WriteLine("decimal val1({0}) rounded = {1}", val1, Math.Round(val1, 2));
Console.WriteLine("decimal val2({0}) rounded = {1}", val2, Math.Round(val2, 2));
double dval1 = 2.135;
double dval2 = 3.135;
Console.WriteLine("double val1({0}) rounded = {1}", dval1, Math.Round(dval1, 2));
Console.WriteLine("double val2({0}) rounded = {1}", dval2, Math.Round(dval2, 2));