我只是在学习C#而无法弄清楚这段代码有什么问题。
错误CS1750类型' int'的值不能用作默认参数,因为没有标准转化来键入' MidpointRounding'
代码:
public static double MyRound(double value, int point, MidpointRounding midpointRounding = 1)
{
if (!Enum.IsDefined(typeof (MidpointRounding), midpointRounding))
throw new ArgumentOutOfRangeException(nameof(midpointRounding));
decimal num = (decimal)((double)value);
try
{
num = Math.Round(num, point, midpointRounding);
}
catch (Exception exception1)
{
Exception exception = exception1;
MessageBox.Show(exception.Message, "Error : MyRound", MessageBoxButton.OK, MessageBoxImage.Hand);
}
return (double)((double)num);
}
答案 0 :(得分:7)
最后一个参数是MidpointRounding
类型,它是一个枚举。您可以隐式分配给枚举的唯一int
文字是0
。您提供的默认值为1
,这是编译器抱怨的内容。
请改用MidpointRounding.ToEven
,如果这就是您的意思。
其他一些观察结果:
midpointRounding
是否在范围内Math.Round
will take care of that。return (double)((double)num);
,一次演员就够了;)(double)value
,因为value
已经是double
double
投射到decimal
,然后使用给定方法对其进行舍入,然后将其强制转换回double
理念。你将失去精确度,中点四舍五入很可能会被击败。如果中点舍入方法很重要,请始终使用decimal
。