如何将各种未知数字类型转换为双精度 [英] How to cast from various unknown numeric types to double
问题描述
我的代码将从各种数值类型的各种来源中获取大量数据,这些数据都以 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屋!