8

独自の数値型 (実際には) を作成したので、インターフェイスDoubleDoubleを実装したいと思います。IFormattableしたがって、何らかの方法でフォーマット文字列を解析する必要があります。

public string ToString(string format, IFormatProvider formatProvider) {
    // formatting string according to format and using formatprovider?
    return formattedString;
}

doubleクラスのユーザーは、 (または他の数値形式) の代わりとして使用できる必要があります。

String.Format("{0:0.##}", (DoubleDouble)123.4567);

私の質問は、誰かがこれについての良いチュートリアルを知っていますか、それともヒントを教えてくれますか? このプロセスでローカライズをサポートするにはどうすればよいですか?

フォーマット文字列を解析するには? このタスクを支援する方法はいくつかありますか、それとも正規表現などを使用してすべて「手動」で行う必要がありますか?

本当にヘルプを検索しましたが、何も見つかりませんでした。別の言語 (C、C++) で役立つものが見つかった場合は、それについて教えてください。

4

4 に答える 4

1

MSDN には、独自のカスタム形式でインターフェイスを実装するクラスの良い例があります。TemperatureIFormattable

あなたはすでにこれを知っていると思います。とにかく、今日私はあなたのDoubleDoubleクラスがIFormattableインターフェースを実装した場合、次のことを学びました:

String.Format("{0:0.##}", (DoubleDouble)123.4567);

...特定の形式を最初のパラメーターとして使用してDoubleDoubleクラスの実装を呼び出しますが、これはあなたが望むものに近いと思います。ただし、フォーマットのその部分を解析する必要があります。ToString(...)"0.##"

フォーマット解析の多くは、高度に最適化された .Net ライブラリ バイナリに深く埋め込まれているので、カスタムの解析仮想メソッドが役に立たないのではないかと思います。

于 2013-01-12T21:51:35.487 に答える
0

このプロセスでローカライズをサポートするにはどうすればよいですか?

次のようなもの:

public string ToString(string format, IFormatProvider formatProvider)
{
  CultureInfo culture = formatProvider as CultureInfo;
  if (culture != null)
  {
    // Now you can do things like 
    // culture.NumberFormat.NumberDecimalSeparator, etc.
  }
}

フォーマット文字列を解析するには? このタスクを支援する方法はいくつかありますか、それとも正規表現などを使用してすべて「手動」で行う必要がありますか?

.NET フレームワークには、それを行うためのパブリック API はありません。の .NET プリミティブ数値型の実装のソースを見るとIFormattable、それらはすべて最終的に外部メソッドを呼び出すため、洞察は得られません。フォーマット文字列を解析するには、おそらく RegEx のようなものを使用する必要があります。10次に、出力の最初の桁がどうなるかを把握するためにの最大のべき乗で割って、それを減算し、10すべての桁を生成するまで、の小さい方のべき乗を繰り返します。

于 2012-08-29T04:34:24.790 に答える
0

多分これはあなたを助けることができます:

var my = DoFormat(123.0)

public static string DoFormat( double myNumber )
{

    var s = string.Format("{0:0.00}", myNumber);

    if ( s.EndsWith("00") )
    {
        return ((int)myNumber).ToString();
    }
    else
    {
        return s;
   }
}
于 2012-11-10T06:06:50.953 に答える