米ドルの通貨形式にフォーマットしようとしていますが、値が整数になる場合はdouble
末尾を使用したくありません。00
私が試してみました
String.Format("{0:#,0.#0}", cost);
と
String.Format("{0:#,0.##}", cost);
前者は私00
を整数で追跡し、後者は私55.6
が望む場所を与えてくれ55.60
ます。これらの両方のニーズを満たすために、どのように値をフォーマットできますか?
米ドルの通貨形式にフォーマットしようとしていますが、値が整数になる場合はdouble
末尾を使用したくありません。00
私が試してみました
String.Format("{0:#,0.#0}", cost);
と
String.Format("{0:#,0.##}", cost);
前者は私00
を整数で追跡し、後者は私55.6
が望む場所を与えてくれ55.60
ます。これらの両方のニーズを満たすために、どのように値をフォーマットできますか?
次のようなことを試してください:
var output = string.Format(((Math.Round(num) == num) ? "{0:0}" : "{0:0.00}"), num);
Try
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"
標準フォーマットの文字列ではそれが可能だとは思いませんが、トリックは次のようになります。
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);
私は知っている、それは醜いです...
を呼び出すことにより、通貨( "C")フォーマット指定子を使用できますToString
。実際の作業は必要ありません。
例
string s = cost.ToString("C0"); // Where 0 is the precision
精度の高い表示を省略するなど、1回の呼び出しで条件付きの処理を行うことはできませんが、いくつかの拡張メソッドを使用して行うことはできます。
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
他の方法よりもこの方法で行うことの利点は、文化情報を処理し、はるかに洗練されたソリューションになることです。