为什么 MidpointRounding.AwayFromZero 和 MidpointRounding.ToEven 做同样的事情?
Why does MidpointRounding.AwayFromZero and MidpointRounding.ToEven do the same thing?
我遇到了一个很烦人的问题。
假设我有小数点 2.5,我希望它四舍五入。
我的所有研究都告诉我:
Math.Round(2.5, 0, MidpointRounding.AwayFromZero)
会给我想要的结果。
然而,当准确地尝试那段代码时,它 returns 2,而不是它应该的 3。
它甚至在一个空白的控制台应用程序中执行此操作,因为我不确定是否有其他东西可能会干扰它。
我是不是误会了什么?基本上我只希望我给它的数字一直四舍五入。
您想使用 AwayFromZero。如果一个数字在两个整数之间结束,比如 1.5,它将四舍五入为 2。否则,四舍五入将正常进行。
Here 是文档。
如果您希望始终向上舍入,请使用 Math.Ceiling(my_double);
。
找出解决方案:
基本上在我的代码中,我从输入字段中检索 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();
对不起,如果我浪费了任何人的时间。
您在评论中提到您想要 convert an int to half it's value, always rounded up
。
假设 int 为正数,最有效的方法就是:
int result = (value+1)/2;
如果您需要处理正值和负值,
int result = (value+Math.Sign(x))/2;
我遇到了一个很烦人的问题。
假设我有小数点 2.5,我希望它四舍五入。 我的所有研究都告诉我:
Math.Round(2.5, 0, MidpointRounding.AwayFromZero)
会给我想要的结果。
然而,当准确地尝试那段代码时,它 returns 2,而不是它应该的 3。 它甚至在一个空白的控制台应用程序中执行此操作,因为我不确定是否有其他东西可能会干扰它。
我是不是误会了什么?基本上我只希望我给它的数字一直四舍五入。
您想使用 AwayFromZero。如果一个数字在两个整数之间结束,比如 1.5,它将四舍五入为 2。否则,四舍五入将正常进行。
Here 是文档。
如果您希望始终向上舍入,请使用 Math.Ceiling(my_double);
。
找出解决方案:
基本上在我的代码中,我从输入字段中检索 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();
对不起,如果我浪费了任何人的时间。
您在评论中提到您想要 convert an int to half it's value, always rounded up
。
假设 int 为正数,最有效的方法就是:
int result = (value+1)/2;
如果您需要处理正值和负值,
int result = (value+Math.Sign(x))/2;