我試圖格式化我的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
。我如何格式化我的價值以滿足這兩方面的需求?
我不認爲這是可能的標準格式字符串,但一招是:
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);
我知道,它的醜陋......
嘗試類似這樣:
var output = string.Format(((Math.Round(num) == num) ? "{0:0}" : "{0:0.00}"), num);
第一個格式字符串與OP的第二個示例具有相同的問題:它截斷了55.60到55.6。然而,你的第二個例子起作用。你應該編輯你的答案。 –
@DanJ:謝謝。完成。 –
乾杯 - 改變了我的投票。 –
嘗試
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"
您是否測試過各種不同的數字? –
我更新了我的評論。 –
+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
做這種方式比其他的優點是,它會爲你的文化信息,是一個更好的解決方案。
感謝您的回答!我將不得不回到這一個。這是如何擴展類的?用'this'參數? –
他們被稱爲'擴展方法'。 http://msdn.microsoft.com/en-us/library/bb383977.aspx –
哈哈,嘿,它完成了工作。謝謝。 ps - 你忘了''\\。00 $「'中的脫字符號嗎? '「^ \\。00 $」' –
哦,我明白了,美元符號意味着什麼都沒有通過,但可以有一些東西。所以你省去了插入符號 –