C# 错误:将十进制转换为双精度时,指定的强制转换无效

C# 错误:将十进制转换为双精度时,指定的强制转换无效,c#,C#,我有一个函数,如下所示 private double RoundOff(object value) { return Math.Round((double)value, 2); } 我在下面引用它 decimal dec = 32.464762931906M; var res = RoundOff(dec); 我得到下面的错误 指定的强制转换无效 错在哪里 谢谢将对象强制转换为双精度将尝试将对象取消装箱为双精度,但装箱的对象是十进制。首先解除绑定后,需要将

我有一个函数,如下所示

private double RoundOff(object value)

    {
        return Math.Round((double)value, 2);
    }
我在下面引用它

decimal  dec = 32.464762931906M;
var res = RoundOff(dec);
我得到下面的错误

指定的强制转换无效

错在哪里


谢谢

对象
强制转换为
双精度
将尝试将对象取消装箱为双精度,但装箱的对象是
十进制
。首先解除绑定后,需要将其转换为double。然后执行舍入:


数学四舍五入((双)(十进制)值,2);

对象
强制转换为
双精度
将尝试将对象取消装箱为双精度,但装箱的对象是
十进制
。首先解除绑定后,需要将其转换为double。然后执行舍入:


数学四舍五入((双)(十进制)值,2);

作为John答案的替代,如果您想使用除十进制以外的其他数字类型,您可以使用此代码

    private double RoundOff(object value)
    {
        return Math.Round(Convert.ToDouble(value), 2);
    }

作为John答案的替代方案,如果您想使用除十进制以外的其他数字类型,您可以使用以下代码

    private double RoundOff(object value)
    {
        return Math.Round(Convert.ToDouble(value), 2);
    }

其他答案在获得运行的东西方面是正确的,但我不建议使用它们

您几乎不应该在
十进制
双精度
之间进行转换。如果要使用十进制,应使用
Math.Round(decimal)
。不要将小数点转换为双精度和四舍五入,这样很容易出现丢失信息的糟糕情况


选择正确的表达方式并坚持下去。哦,重新设计
RoundOff
以不获取
对象
。无论如何,对于
double
decimal
都要有一个重载,但要给它们适当的参数类型。

其他答案在获取将运行的内容方面是正确的,但我不建议使用它们

您几乎不应该在
十进制
双精度
之间进行转换。如果要使用十进制,应使用
Math.Round(decimal)
。不要将小数点转换为双精度和四舍五入,这样很容易出现丢失信息的糟糕情况

选择正确的表达方式并坚持下去。哦,重新设计
RoundOff
以不获取
对象
。无论如何,为
double
设置一个重载,为
decimal
设置一个重载,但要为它们提供适当的参数类型