我只是学习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);
}
Run Code Online (Sandbox Code Playgroud)
最后一个参数是类型MidpointRounding,它是一个枚举.int您可以隐式分配给枚举的唯一文字是0.您提供了默认值1,这是编译器抱怨的内容.
使用MidpointRounding.ToEven替代,如果这是你的意思.
其他一些观察:
midpointRounding在范围内,Math.Round将照顾到这一点.return (double)((double)num);,一个演员就够了;)(double)value,就像value现在一样doubledouble来decimal,然后用给定的方法舍入,然后浇注回double是不是一个好主意.你将失去精确度,中点舍入方法很可能会失败.使用decimal一直以来,如果中点四舍五入方法是很重要的.| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |