繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM