错误:在将十进制转换为双精度时,指定的类型转换无效
本文关键字:无效 类型转换 双精度 十进制 转换 错误 | 更新日期: 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);
其他答案都是正确的,但我不建议使用它们。
你几乎不应该在decimal
和double
之间进行转换。如果你想使用小数,你应该使用Math.Round(decimal)
。不要将小数转换为双精度和四舍五入,这样很容易造成信息丢失。
选择正确的表示并坚持使用它。对了,把RoundOff
重新设计成,而不是取object
。无论如何,要为double
和decimal
分别设置一个重载,但要给它们适当的参数类型。
作为John的答案的替代方案,如果您想使用十进制以外的其他数字类型,您可以使用以下代码;
private double RoundOff(object value)
{
return Math.Round(Convert.ToDouble(value), 2);
}