错误:将十进制转换为double时,指定的强制转换无效

时间:2011-04-05 10:07:45

标签: c#

我有一个

下的功能
private double RoundOff(object value)

    {
        return Math.Round((double)value, 2);
    }

我在

下调用它
decimal  dec = 32.464762931906M;
var res = RoundOff(dec);

我收到以下错误

指定演员无效

错误是什么?

由于

3 个答案:

答案 0 :(得分:2)

object投射到double会尝试将对象取消装箱为双,但装箱的对象为decimal。首先将其拆箱后,您需要将其转换为double。然后你执行舍入:

Math.Round((double)(decimal)value, 2);

答案 1 :(得分:2)

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

你几乎永远decimaldouble之间进行转换。如果要使用小数,则应使用Math.Round(decimal)。不要将小数转换为双倍和舍入 - 可能很容易出现丢失信息的恶劣情况。

选择正确的代表并坚持下去。哦,重新设计RoundOffobject。无论如何都要为double设置一个重载,为decimal设置一个重载,但为它们提供适当的参数类型。

答案 2 :(得分:0)

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

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