[英]C# Rounding MidpointRounding.ToEven vs MidpointRounding.AwayFromZero
[英]Why does MidpointRounding.AwayFromZero and MidpointRounding.ToEven do the same thing?
我遇到了一个很烦人的问题。
可以说我有十进制的2.5,我希望将其取整。 我所有的研究告诉我:
Math.Round(2.5, 0, MidpointRounding.AwayFromZero)
会给我想要的结果。
但是,当完全尝试这段代码时,它将返回2,而不是应有的3。 它甚至可以在空白的控制台应用程序中执行此操作,因为我不确定是否可能有其他干扰。
我在这里误会什么吗? 基本上,我只想一直给定它的数字。
您要使用AwayFromZero。 如果数字以两个整数(例如1.5)结尾,则将舍入为2。否则,舍入将正常进行。
这是文档。
如果您希望始终四舍五入,请使用Math.Ceiling(my_double);
。
您在注释中提到convert an int to half it's value, always rounded up
。
假设int为正,最有效的方法是:
int result = (value+1)/2;
如果您需要处理正值和负值,
int result = (value+Math.Sign(x))/2;
找出解决方案:
基本上在我的代码中,我从输入字段中检索一个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();
对不起,如果我浪费任何人的时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.