指定的强制转换无效..如何解决此问题

lea*_*ner 39 c#

我有以下功能

public object Convert(object value)
 {
    string retVal = string.Empty;
    int oneMillion = 1000000;
    retVal = ((double)value / oneMillion).ToString("###,###,###.###");
    return retVal;
 }
Run Code Online (Sandbox Code Playgroud)

我正在调用

var result  = Convert(107284403940);
Run Code Online (Sandbox Code Playgroud)

错误:"指定的演员表无效."

怎么修...

注意:〜对象值可以是double,decimal,float,integer(32和64)..任何东西

是否可以在运行时进行类型转换?

Kie*_*one 76

使用Convert.ToDouble(value)而不是(double)value.它需要object并支持您要求的所有类型!:)

此外,您的方法总是返回string上面的代码; 我建议让方法表明,并给它一个更明显的名字(public string FormatLargeNumber(object value))

  • 我不这么认为:`double.MaxValue`是1.7976931E + 308,`decimal.MaxValue`是7.9228E + 24.你有资源吗? (2认同)
  • [从十进制到单一或双精度的转换缩小了可能失去精度的转换,但没有关于转换值的大小的信息.](http://msdn.microsoft.com/en-us/library/1k2e8atx(v = VS. 71).aspx)因为Decimal是**128**位数,其中double是**64**位长 (2认同)
  • 是的,它可能会失去精度,但不会溢出。您的解决方案将不起作用,因为它可能会溢出。对不起! (2认同)
  • 同意。撤销我的反对票,我只想到数字的宽度,而不是大小或范围。 (2认同)

San*_*ath 5

如果您期望double, decimal, float, integer为什么不使用可容纳所有十进制的数字 128 位对于您正在查看的大多数数字来说就足够了)。

而不是(double)value使用decimal.Parse(value.ToString())Convert.ToDecimal(value)

  • 是的,**确实**大或小的十进制值会溢出此解决方案。会删除我的答案,但将其保留为**警告标志** (5认同)
  • 这可能*双精度溢出*,因为OP说值可以是双精度的。[128 位精度并不意味着十进制可以存储更大的值;)] (2认同)