Как я могу создать перечисление типа double?
Возможно ли или мне нужно создать какую-то коллекцию и хэш?
Как я могу создать перечисление типа 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;
}
static
или const
.
- person Jay Bazuzi; 17.03.2009
static
const
?
- person Johnny5; 12.09.2012
Я думаю, это зависит от того, сколько неприятностей вы хотите пройти. Вы можете преобразовать двойное число в длинное, поэтому, если вы преобразовали свои двойные значения в длинные целые числа в отдельной программе и вывели постоянные значения, вы могли затем использовать их в своей программе.
Между прочим, я бы категорически не одобрял этого, но иногда нужно делать то, что должен делать.
Во-первых, напишите программу для преобразования ваших двойников в длинные:
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 — ваши единственные варианты.
Почему ради интереса? Может быть, мы сможем обойти это.
Невозможно использовать double для перечисления. См. следующую статью MSDN для объяснения того, как работают перечисления:
Вот цитата из статьи, которая отвечает на ваш вопрос:
Каждый тип перечисления имеет базовый тип, который может быть любым целочисленным типом, кроме char. Базовым типом элементов перечисления по умолчанию является int.
Зачем вам нужно использовать перечисление типа double?
Если вам нужны вспомогательные значения, вы можете просто умножить двойные значения с помощью постоянного оператора, чтобы превратить их все в целые числа (и сохранить то же соотношение), а затем использовать тот же оператор, чтобы впоследствии вернуть ваши значения к двойным... Если вы умножите десятками это было бы просто временное перемещение десятичного разделителя влево. Простой, но эффективный.