我有一个
下的功能private double RoundOff(object value)
{
return Math.Round((double)value, 2);
}
我在
下调用它decimal dec = 32.464762931906M;
var res = RoundOff(dec);
我收到以下错误
指定演员无效
错误是什么?
由于
答案 0 :(得分:2)
将object
投射到double
会尝试将对象取消装箱为双,但装箱的对象为decimal
。首先将其拆箱后,您需要将其转换为double。然后你执行舍入:
Math.Round((double)(decimal)value, 2);
答案 1 :(得分:2)
其他答案在获取可运行的内容方面是正确的 - 但我不建议使用它们。
你几乎永远在decimal
和double
之间进行转换。如果要使用小数,则应使用Math.Round(decimal)
。不要将小数转换为双倍和舍入 - 可能很容易出现丢失信息的恶劣情况。
选择正确的代表并坚持下去。哦,重新设计RoundOff
到不取object
。无论如何都要为double
设置一个重载,为decimal
设置一个重载,但为它们提供适当的参数类型。
答案 2 :(得分:0)
作为John答案的替代方案,如果您想使用除十进制以外的其他数字类型,您可以使用此代码;
private double RoundOff(object value)
{
return Math.Round(Convert.ToDouble(value), 2);
}