MidpointRound.AwayFromZero过载应该是在四舍五入的情况下将5整整。
例:Math.Round(1.5, 1, MidpointRounding.AwayFromZero);
这个回合是1.5到2轮。
但是,当我尝试Math.Round(1.025, 2, MidpointRounding.AwayFromZero);
时,它会将其舍入到1.02。不过,它应该会聚集到1.03。
有人知道为什么会这样吗?谢谢!
发布于 2022-11-21 00:20:12
值1.025
不能完全表示为double
类型。浮点数有这个问题。见Why are floating point numbers inaccurate?。
当您将1.025
写成一个double
数字时,它在内部会比1.025
小一些。这就是为什么四舍五入提供了一个意想不到的值。
当处理您想要的值与显示值完全相同的货币或其他东西时,请使用decimal
类型而不是double
类型。
decimal roundedValue = Math.Round(1.025m, 2, MidpointRounding.AwayFromZero);
请注意,数字后面的m
将该数字转换为decimal
类型的文字。
https://stackoverflow.com/questions/74513007
复制相似问题