gpt4 book ai didi

c# - 四舍五入小数值

转载 作者:太空狗 更新时间:2023-10-29 18:06:03 25 4
gpt4 key购买 nike

我在使用 Math.Round(a, 2);

在 C# 中舍入十进制值时遇到问题

当我将 1.275 舍入到小数点后 2 位时,结果为 1.27。当我对 1.375 执行相同操作时,结果为 1.38。

为什么不将 1.275 舍入为 1.28?

谢谢

最佳答案

我无法重现您的问题:

Math.Round(1.275m, 2) => 1.28m
Math.Round(1.375m, 2) => 1.38m

我怀疑您声称使用 decimal 值是错误的,您使用的是 double 值。 double 不能精确地表示很多小数值,所以当你写 1.275 时,它实际上是 1.27499... 1.375 是少数几个可以表示的值之一一次,所以它实际上是 1.375

如果您的代码关心精确的十进制表示,例如当您处理金钱时,您必须使用decimal 而不是二进制 float ,例如doublefloat


但即使您使用小数表示法,对于许多用户而言,舍入行为也会出乎意料:

Math.Round(1.265m, 2) => 1.26m
Math.Round(1.275m, 2) => 1.28m

默认情况下 Math.Round 使用 MidpointRounding.ToEven ,也称为 Banker's round .这避免了因总是在 .5 处四舍五入而累积偏差。

您可以使用采用舍入模式的 Round 重载,并将其设置为 AwayFromZero 以获得您期望的行为。

Math.Round(1.275m, 2, MidpointRounding.AwayFromZero) => 1.28m

关于c# - 四舍五入小数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11740989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com