現在、Webアプリケーションで米ドルの値を作成するために以下を使用しています。
string.Format("{0:C0}", dollarValue );
この例では、dollarValueが145の場合、$145と表示されます。-145の場合、-$ 145ではなく($ 145)が表示されます。私たちにとって、dollarValueはdoubleですが、任意の数値タイプである可能性があることに注意してください。おもう。
とにかく、私が欲しいのはそれが$145か-$145のどちらかになることです。
さて、私の調査によれば、NumberFormatInfoクラスを使用してこれを行うことが可能かもしれません。使い方がわからず、有効な例も見つかりません。私はここでこの質問を見ました:通貨値が$ 0.00のときに「無料」を表示するカスタムNumberFormatInfoを作成するC#ですが、この質問からリンクされているMSDNの例は、私が実際にやりたいこととは少し異なるようです。
私は、次のことを行う必要があることを認識しています。
double dollarValue = -145d;
string myMoney = dollarValue.ToString( "C0", someIFormatProvider );
ここで、someIFormatProviderはNumberFormatInfoタイプである可能性があります。さて、私がやったことはこれです:
NumberFormatInfo ni = new NumberformatInfo();
ni.CurrencyNegativePattern = 1; // The value 1 should mean not to use parenthesis
string myMoney = dollarValue.ToString( "C0", ni );
...そして「インスタンスは読み取り専用」の例外が発生します。CurrencyNegativePatternプロパティの「ドキュメント」には、値を設定および取得できると記載されていますが、明らかにできません。また、NumberFormatInfoは封印されたクラスです。これに基づいて新しいクラスを簡単に作成し、値をオーバーライドすることはできません。
私はこれにどう対処するか途方に暮れています。今のところ、私の回避策は、負の値を無効にして、string.Format(...)
もう一度実行するという正の結果を出すことです。はい、この前に負の符号がないことはわかっていますが、もちろん、必要に応じて結果の前に「-」を追加することで簡単に解決できます。
この状況でNumbefFormatInfoクラスを効果的に正しく使用する方法の実用的な例を誰かが私に提供することができますか?ありがとう。