2

如何创建 double 类型的枚举?

有可能还是我必须创建某种集合和哈希?

4

7 回答 7

7

你不能让它成为一个枚举。

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;
}
于 2009-03-17T16:42:39.203 回答
3

我想这取决于你想去多大的麻烦。您可以将 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().

于 2009-03-17T17:49:50.553 回答
2

不,枚举本质上是整数值。

我不知道您正在解决的特定问题,但您可以制作通用词典。

当然,双打的比较总是很有趣,特别是当它们在小数位上相差甚远时。如果您尝试将计算结果(相等)与已知的双精度进行比较,可能会很有趣。只是一个警告,如果这是你可能需要做的。

于 2009-03-17T16:49:50.917 回答
1

枚举类型必须是整数类型,除了char. 这不包括double,因此您需要制作一个查找表或一组常量。

于 2009-03-17T16:41:55.147 回答
1

我认为 byte、sbyte、short、ushort、int、uint、long 或 ulong 是您唯一的选择。

为什么,出于兴趣?也许我们可以解决它。

于 2009-03-17T16:43:57.297 回答
0

枚举不能使用双精度。有关枚举如何工作的说明,请参阅以下 MSDN 文章:

MSDN 文章

这是回答您问题的文章的引述:

每个枚举类型都有一个底层类型,它可以是除 char 之外的任何整数类型。枚举元素的默认基础类型是 int。

于 2009-03-17T16:45:04.267 回答
0

为什么需要使用 double 类型的枚举?

如果您需要子值,您可以将双精度值与常量运算符相乘以将它们全部转换为整数(并保持相同的比率),然后使用相同的运算符将您的值转回双精度值......如果您相乘几十个,这就像暂时将小数点分隔符向左移动。简单但有效。

于 2012-03-22T12:52:37.820 回答