为什么MidpointRounding.AwayFromZero和MidpointRounding.ToEven做同样的
本文关键字:MidpointRounding ToEven AwayFromZero 为什么 | 更新日期: 2023-09-27 18:30:46
我遇到了一个相当烦人的问题。
假设我有十进制 2.5,我希望它四舍五入。我所有的研究告诉我:
Math.Round(2.5, 0, MidpointRounding.AwayFromZero)
会给我想要的结果。
然而,当尝试这段代码时,它会返回 2,而不是应有的 3。它甚至在空白控制台应用程序中执行此操作,因为我不确定是否有其他东西会干扰它。
我在这里误解了什么吗?基本上,我只想让我给它的数字始终四舍五入。
您在评论中提到要convert an int to half it's value, always rounded up
.
假设 int 为正数,最有效的方法是:
int result = (value+1)/2;
如果需要处理正值和负值,
int result = (value+Math.Sign(x))/2;
你想使用AwayFromZero。如果一个数字最终位于两个整数之间,例如 1.5,它将舍入为 2。否则,四舍五入将正常进行。
这是文档。
如果要始终向上舍入,请使用 Math.Ceiling(my_double);
。
想出了解决方案:
基本上在我的代码中,我从输入字段中检索 an int,它默认转换为 int,所以当我将其减半时,它会自动向下舍入(例如,5/2 = 2,而不是我预期的 2.5)。
解决方案是将输入数字转换为小数。
更正的代码片段:
// strong is the input value
decimal calc = (decimal)strong / 2;
// targetInput is the input field for the result
targetInput.text = (Math.Round(calc, 0, MidpointRounding.AwayFromZero)).ToString();
对不起,如果我浪费了任何人的时间。