在c#中,Math.Round(2.5)的结果是2。
应该是3,不是吗?为什么在c#中它是2 ?
在c#中,Math.Round(2.5)的结果是2。
应该是3,不是吗?为什么在c#中它是2 ?
当前回答
因为Silverlight不支持midpointrsurround选项,所以你必须自己编写。喜欢的东西:
public double RoundCorrect(double d, int decimals)
{
double multiplier = Math.Pow(10, decimals);
if (d < 0)
multiplier *= -1;
return Math.Floor((d * multiplier) + 0.5) / multiplier;
}
关于如何使用它作为扩展的例子,请参阅文章:.NET和Silverlight圆整
其他回答
因为Silverlight不支持midpointrsurround选项,所以你必须自己编写。喜欢的东西:
public double RoundCorrect(double d, int decimals)
{
double multiplier = Math.Pow(10, decimals);
if (d < 0)
multiplier *= -1;
return Math.Floor((d * multiplier) + 0.5) / multiplier;
}
关于如何使用它作为扩展的例子,请参阅文章:.NET和Silverlight圆整
使用. net对数字进行舍入可以得到您正在寻找的答案。
基本上它是这么说的:
返回值
精度等于数字的最接近的数字值。如果值位于两个数的中间,其中一个是偶数,另一个是奇数,则返回偶数。如果value的精度小于数字,则value不变地返回。
这种方法的行为遵循IEEE标准754,第4节。这种四舍五入有时被称为最接近四舍五入,或银行家四舍五入。如果数字为零,这种舍入有时被称为趋零舍入。
从MSDN:
默认为Math。圆的使用 MidpointRounding.ToEven。大多数人 不熟悉“四舍五入? 甚至“作为替代”,四舍五入 “远离零”更常见 . net默认为 “四舍五入到偶数” 统计上的优势是因为 没有分享的倾向 四舍五入的意思是四舍五入 比它循环的频率稍高 向下(假设数字为 四舍五入往往是积极的。)
http://msdn.microsoft.com/en-us/library/system.math.round.aspx
来自MSDN的数学。Round(double a)返回:
最接近a的整数 a的分数分量是一半 两个整数之间,其中一个是 偶数和另一个奇数,然后是偶数 返回Number。
... 因此,在2和3中间的2.5被四舍五入为偶数(2)。这被称为银行家四舍五入(或四舍五入为偶数),是一种常用的四舍五入标准。
同一篇MSDN文章:
此方法的行为如下 IEEE标准754,第4节。这 四舍五入有时被称为 四舍五入到最接近的,或银行家的 舍入。它最小化舍入误差 这是持续舍入的结果 一个单一的中点值 方向。
您可以通过调用Math的重载来指定不同的舍入行为。回合采取midpointround模式。
这是非常丑陋的,但总是产生正确的算术四舍五入。
public double ArithRound(double number,int places){
string numberFormat = "###.";
numberFormat = numberFormat.PadRight(numberFormat.Length + places, '#');
return double.Parse(number.ToString(numberFormat));
}