为什么MidpointRounding.AwayFromZero和MidpointRounding.ToEven做同样的

本文关键字:MidpointRounding ToEven AwayFromZero 为什么 | 更新日期: 2023-09-27 18:30:46

我遇到了一个相当烦人的问题。

假设我有十进制 2.5,我希望它四舍五入。我所有的研究告诉我:

Math.Round(2.5, 0, MidpointRounding.AwayFromZero)

会给我想要的结果。

然而,当尝试这段代码时,它会返回 2,而不是应有的 3。它甚至在空白控制台应用程序中执行此操作,因为我不确定是否有其他东西会干扰它。

我在这里误解了什么吗?基本上,我只想让我给它的数字始终四舍五入。

为什么MidpointRounding.AwayFromZero和MidpointRounding.ToEven做同样的

您在评论中提到要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();

对不起,如果我浪费了任何人的时间。

相关文章:
  • 没有找到相关文章