DOBON.NETプログラミング掲示板過去ログ
符号付き数値を通貨表示する書式指定について
題名: 符号付き数値を通貨表示する書式指定について
著者: ひらぽん
URL:
http://blogs.yahoo.co.jp/hilapon
日時: 2009/10/01 15:39:46
ID: 25476
この記事の返信元:
(なし)
この記事への返信:
[25477]
Re[1]: 符号付き数値を通貨表示する書式指定について
Hongliang
2009/10/01 16:33:21
ツリーを表示
環境/言語:[XP, Vista, VB.NET, C#]
分類:[.NET]
書式文字列で質問です。
数値を書式指定で通貨表示したいのですが、書式文字列「C」ですと符号付きの場合
Console.WriteLine(String.Format("{0:C}", -12000))
結果:-\12,000
と符号が先頭にきてしまい、こちらが期待する \-12,000 にはなりません。
ちなみにいろいろ試してみました。
Console.WriteLine(String.Format("{0:\#,##0}", -12000))
結果:-#12000
Console.WriteLine(String.Format("{0:\\#,##0}", -12000))
結果:-\12,000
Console.WriteLine(String.Format("{0:\\ #,##0}", -12000))
結果:-\ 12,000
・・・ぜんぶ通貨記号の前に符号が配置されてます。
以下のように通貨記号の後に符号がくるにはどう書式指定したらよいでしょうか?
\-12,000
それとも実はこちらの思い違いで、
-\12,000
が表記的に正しい?
題名: Re[1]: 符号付き数値を通貨表示する書式指定について
著者: Hongliang
日時: 2009/10/01 16:33:21
ID: 25477
この記事の返信元:
[25476]
符号付き数値を通貨表示する書式指定について
ひらぽん
2009/10/01 15:39:46
この記事への返信:
[25480]
Re[2]: 符号付き数値を通貨表示する書式指定について
ひらぽん
2009/10/01 17:39:32
[解決]
ツリーを表示
通貨や日付みたいな、カルチャにモロに影響されるものは、プログラム上でカルチャを明示して書式指定すべきです。¥で表示するはずが$になってたりしたら目も当てられません。
さて、通貨の負の値に対する表示パターンは、NumberFormatInfo.CurrencyNegativePattern プロパティで指定されます。
http://msdn.microsoft.com/ja-jp/library/system.globalization.numberformatinfo.currencynegativepattern.aspx
日本固定なら、まず CultureInfo を ja-JP で new し、その NumberFormat 経由で設定するのがいいでしょう。
で、この CultureInfo またはその NumberFormat を、IFormatProvider を受け取る String.Format に渡すようにします(Cultureinfo および NumberFormatInfo はどちらも IFormatProvider インターフェイスを実装しています)。
> それとも実はこちらの思い違いで、
> -\12,000
> が表記的に正しい?
これは、何が正しいというわけでもなく、どうしたいのかによるだけの話でしょう。
私の感性から言うと、通貨記号の方がマイナスより先に来るのが一般的な気がしますね。
題名: Re[2]: 符号付き数値を通貨表示する書式指定について
著者: ひらぽん
URL:
http://blogs.yahoo.co.jp/hilapon
日時: 2009/10/01 17:39:32
ID: 25480
この記事の返信元:
[25477]
Re[1]: 符号付き数値を通貨表示する書式指定について
Hongliang
2009/10/01 16:33:21
この記事への返信:
(なし)
ツリーを表示
ありがとうございます。
> 通貨や日付みたいな、カルチャにモロに影響されるものは、プログラム上でカルチャを明示して書式指定すべきです。¥で表示するはずが$になってたりしたら目も当てられません。
なるほど・・・全くおっしゃる通りです(汗
> さて、通貨の負の値に対する表示パターンは、NumberFormatInfo.CurrencyNegativePattern プロパティで指定されます。
> http://msdn.microsoft.com/ja-jp/library/system.globalization.numberformatinfo.currencynegativepattern.aspx
> 日本固定なら、まず CultureInfo を ja-JP で new し、その NumberFormat 経由で設定するのがいいでしょう。
> で、この CultureInfo またはその NumberFormat を、IFormatProvider を受け取る String.Format に渡すようにします(Cultureinfo および NumberFormatInfo はどちらも IFormatProvider インターフェイスを実装しています)。
そんなクラスがあったのですね!!
早速アプリケーション全体に適用されるよう、Main メソッドの先頭で以下のように実装してみました。
My.Application.ChangeCulture("ja-JP")
My.Application.Culture.NumberFormat.CurrencyNegativePattern = 2 ' $-n 表示
これでメインの EXE だけでなく、EXE から呼び出すライブラリもすべて反映されました。
ちなみにライブラリ側のフォームで GrapeCity の MultiRow を使っているのですが、
書式を "C" に指定したセルが全て
「\-三桁区切りの整数値」
で表示されるのを、複数のフォームで確認できました。本当に助かりました。<(_ _)>
>>それとも実はこちらの思い違いで、
>>-\12,000
>>が表記的に正しい?
> これは、何が正しいというわけでもなく、どうしたいのかによるだけの話でしょう。
> 私の感性から言うと、通貨記号の方がマイナスより先に来るのが一般的な気がしますね。
なるほど・・・パターンが16個も用意されているところをみると、そうなんでしょうね。
今回チェックして気づいた私や顧客の感覚では
「符号が円記号の前にある!!これはおかしい!!」
となったのですが、NumberFormatInfo.CurrencyNegativePattern のヘルプに
「規定値は 0 で、"($n)" を表します。」
とあるところをみると、海外では "($n)" や "-$n" 表記が標準なのかも知れませんね(汗
解決済み!
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
書式文字列で質問です。
数値を書式指定で通貨表示したいのですが、書式文字列「C」ですと符号付きの場合
Console.WriteLine(String.Format("{0:C}", -12000))
結果:-\12,000
と符号が先頭にきてしまい、こちらが期待する \-12,000 にはなりません。
ちなみにいろいろ試してみました。
Console.WriteLine(String.Format("{0:\#,##0}", -12000))
結果:-#12000
Console.WriteLine(String.Format("{0:\\#,##0}", -12000))
結果:-\12,000
Console.WriteLine(String.Format("{0:\\ #,##0}", -12000))
結果:-\ 12,000
・・・ぜんぶ通貨記号の前に符号が配置されてます。
以下のように通貨記号の後に符号がくるにはどう書式指定したらよいでしょうか?
\-12,000
それとも実はこちらの思い違いで、
-\12,000
が表記的に正しい?