2012-05-10 45 views
2

doubleを米ドル通貨形式にフォーマットしようとしていますが、値が整数になる場合は、00の後には挿入しません。私はかつて文字列 - 金額の書式設定

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

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

を試してみました

は、全体の数に00を末尾に私を残している、と私は55.60を配置したい場所を、後者は私に55.6を与えるされています。これらのニーズを満たすために、私の価値をどのようにフォーマットできますか?

答えて

2

私はそれが標準フォーマット文字列で可能だとは思わないが、トリックは次のようになります。

Regex.Replace(String.Format("{0:#,##0.00}", cost),"\\.00$",""); 

か:私が知っている

string s = String.Format("{0:#,##0.00}", cost); 

if (s.EndsWith(".00")) 
    s = s.Substring(0,s.Length-3); 

、それは醜いです...

+0

ハハ、ちょっと、仕事が終わった。どうも。 ps - あなたはキャレットを '' \\。00 $ "'で忘れていますか? "^ \\。00 $" ' –

+0

ああ私はそれを得る、ドル記号は何も渡されなかったことを意味するが、 –

4

このようなものを試す:

var output = string.Format(((Math.Round(num) == num) ? "{0:0}" : "{0:0.00}"), num); 
+0

最初の書式文字列には、OPの2番目の例と同じ問題があります。55.60〜55.6を切り捨てます。しかし、2番目の例はうまくいきます。あなたはあなたの答えを編集する必要があります。 –

+0

@ DanJ:ありがとう。完了しました。 –

+0

乾杯 - 私の投票を逆転させました。 –

2

string val = decimal.Parse("2.00").ToString("G29") 


?decimal.Parse("2.00").ToString("G29") 
"2" 
?decimal.Parse("2.02").ToString("G29") 
"2.02" 
?decimal.Parse("12.0045").ToString("G29") 
"12.0045" 
?decimal.Parse("0.0045").ToString("G29") 
"0.0045" 
?decimal.Parse("0.00").ToString("G29") 
"0" 
?decimal.Parse("0.05").ToString("G29") 
"0.05" 
+0

これをさまざまな番号でテストしましたか? –

+0

私のコメントが更新されました。 –

+0

+1:自分でテストしただけで、うまく動作しているようです。ニースの解決策。 –

1

あなたはToStringを呼び出すことによってCurrency ("C") Format Specifierを使用することができますしてみてください。実際の作業は必要ありません。

string s = cost.ToString("C0"); // Where 0 is the precision 

あなたはオミット精密ディスプレイのような単一の呼び出しで、条件は何もできない、しかし、あなたは、いくつかの拡張メソッドを通じてそれを行うことができます。

static class CurrencyExtensions 
{ 
    public static String ToCurrency(this decimal d) { // Extend Decimal 
     if (d % 1 != 0) return d.ToString("C2"); 
     return d.ToString("C0"); 
    } 

    public static String ToCurrency(this double d) { // Extend Double 
     if (d % 1 != 0) return d.ToString("C2"); 
     return d.ToString("C0"); 
    } 
} 

使用例

decimal amount1 = 4m; 
decimal amount2 = 4.25m; 

string s1 = amount1.ToCurrency(); // $4 
string s2 = amount2.ToCurrency(); // $4.25 

は、このよう他の人にそれをすることの利点は、それはあなたのための文化情報を処理し、はるかにエレガントな解決策であるということです。

+0

あなたの答えをありがとう!私はこれに戻る必要があります。これはどのようにクラスを拡張しますか? 'this'パラメータを使って? –

+0

「拡張メソッド」と呼ばれています。 http://msdn.microsoft.com/en-us/library/bb383977.aspx –

関連する問題