错误:在将十进制转换为双精度时,指定的类型转换无效

本文关键字:无效 类型转换 双精度 十进制 转换 错误 | 更新日期: 2023-09-27 17:49:16

下面有一个函数

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

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

我得到下面的错误

指定的类型转换无效

错误是什么?

谢谢

错误:在将十进制转换为双精度时,指定的类型转换无效

object转换为double将尝试将对象作为双精度体解盒,但已装箱的对象是decimal。您需要在首次拆箱后将其转换为double类型。然后执行舍入:

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

其他答案都是正确的,但我不建议使用它们。

你几乎不应该decimaldouble之间进行转换。如果你想使用小数,你应该使用Math.Round(decimal)。不要将小数转换为双精度和四舍五入,这样很容易造成信息丢失。

选择正确的表示并坚持使用它。对了,把RoundOff重新设计成,而不是object。无论如何,要为doubledecimal分别设置一个重载,但要给它们适当的参数类型。

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

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