你能在Double变量中使用枚举吗?

14

我已经用C#创建了一个处理单位转换的类。它没有按照预期工作,只返回字符串。

以下是该类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace RestaurantManagementSystem
{
    class unitHandler
    {
        public enum Units
        {
            Grams = 1,
            KiloGrams = 0.001,
            Milligram = 1000,
            Pounds = 0.00220462,
            Ounces = 0.035274,
            Tonnes = 0.000001,

            Litres = 1,
            Millilitres = 1000,
            Cups = 4.22675,
            FluidOunces = 33.814,
            TeaSpoon = 202.884,
            TableSpoon = 67.628,
            CubicFeet = 0.0353147,
            CubicInch = 61.0237,
            CubicCentimetres = 0.0001,
            CubicMetres = 0.001

        }

        public double Convert_Value(Units from, Units to, double quantity)
        {
            double converted_quantity = 0;

            double fromValue = quantity * Convert.ToDouble(from.ToString());

            converted_quantity = fromValue * Convert.ToDouble(to.ToString());

            return converted_quantity;
        }
    }
}

我希望枚举类型包含每个单位的转换因子双精度值,然后将它们用于转换并返回转换后的数量。


不可以,但是你可以将整数解释为定点数。 - leppie
6个回答

24
不,枚举的默认类型是intlong,不支持使用小数。您可以使用结构体或类来代替枚举用于双精度浮点数。
public struct Units
{
        public const double Grams = 1;
        public const double KiloGrams = 0.001;
        public const double Milligram = 1000;
        public const double Pounds = 0.00220462;
        public const double Ounces = 0.035274;
        public const double Tonnes = 0.000001;
        // Add Remaining units / values
}

使用方法如下:
double d = Units.KiloGrams;

这段代码片段非常令人困惑...(即使编辑过后,仍然毫无意义!) - leppie
6
请至少使用一个包含常量的静态类。 - Dmitry S.

5

不行:

我试着把这个交给Visual Studio:

public enum Test : double
{
    Hello, World
}

它说:

应输入类型 byte、sbyte、short、ushort、int、uint、long 或 ulong


3

你不能使用浮点型/双精度型与枚举类型一起使用。你可能需要定义常量。

public const double KiloGrams = 0.001;

3

抱歉,无法实现。枚举是严格的整数/字节类型。实际上,它们应该是自己的类型。

您可以尝试以下方法:

enum Units() {
    Grams ,
    KiloGrams ,
    Milligram 
}

public function GetUnitsFloatValue(Units unit) : float
{
    switch (unit)
    {
        case Units.Grams :
            return 1;
        case Units.KiloGrams :
            return 0.001;
        case Units.MilliGrams:
            return 1000;           
    }

    //unhandled unit?
    return 0;
}

1
你可以使用 BitConverter.DoubleToInt64Bits(double) 方法将 double 转换为 long,然后将它们硬编码到具有支持 long 类型的枚举中。然后您需要将枚举值转换回 double
这可能比值得的麻烦多了。

0

你不能使用枚举类型来处理双精度浮点数,只能用于 intlong 类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接