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
设置一个重载,但要为它们提供适当的参数类型