【问题标题】:Specified cast is not valid.. how to resolve this指定的演员表无效..如何解决这个问题
【发布时间】:2011-04-07 07:32:25
【问题描述】:

我有以下功能

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

我正在调用

var result  = Convert(107284403940);

错误:“指定的转换无效。”

如何解决...

注意:~ 对象值可以是双精度、十进制、浮点、整数(32 和 64)..anything

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

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    另外,你的方法在上面的代码中总是返回一个string;我建议让方法表明这一点,并给它一个更明显的名称 (public string FormatLargeNumber(object value))

    【讨论】:

    【解决方案2】:

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

    使用decimal.Parse(value.ToString())Convert.ToDecimal(value) 代替(double)value

    【讨论】:

    • 这可能 overflow for double 因为 OP 说值可以是双倍的。 [128位精度并不意味着十进制可以存储更大的值;)]
    • 是的,真的大或小的十进制值都会溢出这个解决方案。会删除我的答案,但将其保留为警告标志
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多