11

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;
        }
    }
}

どういうわけか、列挙型に各単位の変換係数の double 値を含めてから、それらを変換に使用して変換された数量を返すようにしたいと思います。

4

6 に答える 6

20

いいえ、列挙型のデフォルトのタイプはまたはintであり、long小数を使用できませんでした。列挙型の代わりに構造体またはクラスをdoubleに使用できます

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;
于 2013-02-07T05:23:33.140 に答える
4

いいえ:

これをVisualStudioに渡してみました。

public enum Test : double
{
    Hello, World
}

そしてそれは言った:

「byte」、「sbyte」、「short」、「ushort」、「int」、「uint」、「long」、または「ulong」と入力します。

于 2013-02-07T05:23:27.750 に答える
3

列挙型でfloat/doubleを使用することはできません。定数を定義する必要があるかもしれません。

public const double KiloGrams = 0.001;
于 2013-02-07T05:24:23.160 に答える
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;
}
于 2013-02-07T05:52:39.727 に答える
1

事前にメソッドを使用してdoublea を a に変換し、それらをバッキング型の列挙型にハードコードすることができます。次に、列挙値を に戻す必要があります。longBitConverter.DoubleToInt64Bits(double)longdouble

それはおそらく価値があるよりも多くのトラブルです。

于 2013-02-07T05:26:47.853 に答える
0

double で enum を使用することはできません。intとでのみ使用できます。long

于 2013-02-07T05:23:06.703 に答える