如何将各种未知数字类型转换为双精度 [英] How to cast from various unknown numeric types to double

查看:136
本文介绍了如何将各种未知数字类型转换为双精度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码将从各种数值类型的各种来源中获取大量数据,这些数据都以 object 类型到达,为了方便使用,我想将其全部转换为 double (这足以表示整个范围的传入数据,并且不需要极高的精度)。我当然可以解决这个问题,但是我的解决方案似乎很笨拙:

My code will be getting a large amount of data from various sources in various numeric types that all arrive as type object, and for ease of use, I'd like to convert it all to double (which is way more than sufficient to represent the full range of the incoming data, and extreme precision is not necessary). I am certainly able to solve this problem, but my solution seems clunky:

List<object> list = new List<object>();

list.Add((int)42);
list.Add((short)42);
list.Add((float)42.1);
list.Add((double)42.1);
list.Add((decimal)42.1);

foreach (object valObj in list)
{
    Type objType = valObj.GetType();
    double value;

    if      (objType == typeof(int))     { value = (double)(int)valObj;     }
    else if (objType == typeof(short))   { value = (double)(short)valObj;   }
    else if (objType == typeof(float))   { value = (double)(float)valObj;   }
    else if (objType == typeof(double))  { value = (double)valObj;          }
    else if (objType == typeof(decimal)) { value = (double)(decimal)valObj; }
    else throw new Exception("Unexpected type");

    Console.WriteLine("Value: " + value);
}

我想做些简单的事情,但这不起作用:

I'd like to do something simpler, but this doesn't work:

List<object> list = new List<object>();

list.Add((int)42);
list.Add((short)42);
list.Add((float)42.1);
list.Add((double)42.1);
list.Add((decimal)42.1);

foreach (object valObj in list)
{
    double value = (double)valObj; // <--- exception of type 'System.InvalidCastException'
    Console.WriteLine("Value: " + value);
}

知道列表中的所有数据是可以合法地转换为 double 的数字类型,如何将它们转换为 double 无需先将 valObj 转换为任何类型?

Knowing that all of the data in the list is of numeric types that can legitimately be cast as double, how can I cast them as double without first casting valObj as whatever type it is?

推荐答案

您可以使用 Convert.ToDouble ()

You can use Convert.ToDouble().

foreach (object valObj in list)
{
    double value = Convert.ToDouble(valObj);
    Console.WriteLine("Value: " + value);
}

Convert.ToDouble()有很多重载,可以采用以下任何数据类型,

Convert.ToDouble() has many overloads which can take any of the following data types,


  • bool

  • 字节

  • char

  • DateTime

  • 十进制

  • double

  • float

  • int


  • 对象

  • sbyte


  • 字符串

  • uint

  • ulong

  • ushort

  • bool
  • byte
  • char
  • DateTime
  • decimal
  • double
  • float
  • int
  • long
  • object
  • sbyte
  • short
  • string
  • uint
  • ulong
  • ushort

这篇关于如何将各种未知数字类型转换为双精度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆