如何创建 double 类型的枚举?
有可能还是我必须创建某种集合和哈希?
你不能让它成为一个枚举。
http://msdn.microsoft.com/en-us/library/y94acxy2.aspx
一种可能:
public static class MyPseudoEnum
{
public static readonly double FirstVal = 0.3;
public static readonly double SecondVal = 0.5;
}
我想这取决于你想去多大的麻烦。您可以将 double 转换为 long,因此如果您在单独的程序中将 double 值转换为 long 整数,并输出常量值,则可以在程序中使用它们。
顺便说一句,我强烈反对这样做,但有时你必须做你必须做的事情。
首先,编写一个程序将双精度数转换为长整数:
Console.WriteLine("private const long x1 = 0x{0:X16}L;",
BitConverter.DoubleToInt64Bits(0.5));
Console.WriteLine("private const long x2 = 0x{0:X16}L;",
BitConverter.DoubleToInt64Bits(3.14));
现在,将该输出添加到您的程序并创建枚举:
private const long x1 = 0x3FE0000000000000L;
private const long x2 = 0x40091EB851EB851FL;
enum MyEnum : long
{
val1 = x1,
val2 = x2
}
当您想针对枚举测试双精度值时,您必须调用BitConverter.DoubleToInt64Bits()
,并将结果转换为您的枚举类型。要以另一种方式转换,请调用BitConverter.Int64BitsToDouble()
.
不,枚举本质上是整数值。
我不知道您正在解决的特定问题,但您可以制作通用词典。
当然,双打的比较总是很有趣,特别是当它们在小数位上相差甚远时。如果您尝试将计算结果(相等)与已知的双精度进行比较,可能会很有趣。只是一个警告,如果这是你可能需要做的。
枚举类型必须是整数类型,除了char
. 这不包括double
,因此您需要制作一个查找表或一组常量。
我认为 byte、sbyte、short、ushort、int、uint、long 或 ulong 是您唯一的选择。
为什么,出于兴趣?也许我们可以解决它。
枚举不能使用双精度。有关枚举如何工作的说明,请参阅以下 MSDN 文章:
这是回答您问题的文章的引述:
每个枚举类型都有一个底层类型,它可以是除 char 之外的任何整数类型。枚举元素的默认基础类型是 int。
为什么需要使用 double 类型的枚举?
如果您需要子值,您可以将双精度值与常量运算符相乘以将它们全部转换为整数(并保持相同的比率),然后使用相同的运算符将您的值转回双精度值......如果您相乘几十个,这就像暂时将小数点分隔符向左移动。简单但有效。