0

コードに渡されたさまざまなフォーマット記述子を使用して小数をフォーマットする必要があります。これは、小数点の左側にあるさまざまな有効桁数を指定します。ToString 出力は、形式記述子ごとに左側に多すぎる桁数を含めることはできません。そうしないと、エラー (形式オーバーフロー) が返されます。

ToString 10 進形式記述子 (何も見つかりませんでした) または他の 10 進数から文字列への変換メカニズムはありますか? 以下のコードのようなものを動作させるのではなくスローしたいと思います。フォーマット記述子の文字数を数え、その最大小数点を自分で調べ、変換を試みる前に比較するよりも、よりエレガント/組み込みの何かを望んでいます。ありがとう!

    static void Main(string[] args)
    {
        string lFormat = null;
        decimal lValue = 123456.5678m;

        // For example, I would like something like this to throw because the number would not fit into 3 significant left side digits...
        lFormat = "000.00";
        Console.WriteLine("Format '{0}' value '{1}'.", lFormat, lValue.ToString(lFormat));

        Console.WriteLine("Hit Enter to exit...");
        Console.ReadLine();
    }
4

2 に答える 2

2

この動作を持つメソッドは知りませんが、独自のメソッドを非常に簡単に実装できます。体は次のようになります。

int significantDigits = 4;


if (MyFloat.ToString().Split('.')[1].Length > significantDigits)
    throw new Exception("That float was too high of percision.");

おそらくこのコードを改良したいと思うでしょう (たとえば、float ではなく int を入力すると IndexOutOfRangeException でクラッシュします) が、基本的な考え方は、文字列に変換し、 で分割し.、インデックス 1 の長さをチェックし、次の場合に例外をスローします。それは私の限界を超えています。

于 2013-08-12T23:48:47.577 に答える
0

私はこれを行うことにしました:

// 10 進数が指定された形式をオーバーフローしないことを確認します

decimal lMaxValue = decimal.Parse(新しい文字列('9', LeftPlaces) + "." + 新しい文字列('9', RightPlaces));

if (pValue > lMaxValue) 新しい OverflowException() をスローします。

于 2013-08-14T16:58:48.733 に答える