2009-06-26 73 views
47

我喂一個文本框顯示我需要格式化這樣一個平衡的字符串值:格式化像貨幣,但沒有貨幣符號(C#)的雙精度值

###,###,###,##0.00 

我可以使用value.ToString (「c」),但這會將貨幣符號放在它的前面。

任何想法如何在提供文本框來實現上述格式之前操縱字符串?

我試過了,沒有成功:

String.Format("###,###,###,##0.00", currentBalance); 

非常感謝,

回答

50
string forDisplay = currentBalance.ToString("N2"); 
58

如果貨幣格式給你你想要什麼,克隆與NumberFormatInfo並設置CurrencySymbol屬性設置爲「」。當然,你應該檢查它是否以你想要的方式處理負數。

例如:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat; 
     nfi = (NumberFormatInfo) nfi.Clone(); 

     Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m)); 
     nfi.CurrencySymbol = ""; 
     Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m)); 
    } 
} 

另一種選擇是使用過程中的自定義數字格式字符串 - 這取決於你是否真的要鏡像完全是一個貨幣是什麼樣子,只是沒有符號,或控制數字的確切位置。

+0

這完美的作品。如果你想將貨幣格式化爲當前的文化,但沒有符號,這似乎是最好的解決方案。 – 2011-03-08 15:07:12

+1

您可能會考慮在結果中添加一個Trim(),以確保您沒有前導(或尾隨)空格。 – 2012-02-07 14:30:57

7

你試過:

currentBalance.ToString("#,##0.00"); 

這是長手等價的:

currentBalance.ToString("N2"); 
2
CultureInfo cultureInfo = new CultureInfo("en-US"); 
cultureInfo.NumberFormat.CurrencySymbol = "Rs."; 

Thread.CurrentThread.CurrentCulture = cultureInfo; 
decimal devimalValue = 3.45M; 
this.Text = devimalValue.ToString("C2"); //Rs.3.45 
5

字符串結果=的String.Format(「{0:N2} 「,價值); //對於像### ### ## ##

3

結果您可以通過the group separatorthe section separator做到這一點,是這樣的:

currentBalance.ToString("#,0.00;(#,0.00)"); 

此不考慮文化方差像答案@JonSkeet會,但是這確實可以模仿小數位,四捨五入,數千分隔和負數處理,en-US文化貨幣格式使用單個自定義格式字符串生成。

.NET Fiddle Demo

0

這可能是矯枉過正,但它大紅大紫,格式...

@helper TwoDecimalPlaces(decimal? val) 
{ 
    decimal x = 0; 
    decimal y = 0; 
    string clas = "text-danger"; 
    if (val.HasValue) 
    { 
     x = (decimal)val; 
     if (val > 0) 
     { 
      clas = ""; 
     } 
    } 
    y = System.Math.Round(x, 2); 
    IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty); 
    <span class="@clas">@string.Format("{0:N2}", y)</span> 
} 
0

這種簡單的解決方案適用於我與美國貨幣。

如果不需要國際貨幣支持使用此,代之以貨幣符號(S)的$被刪除:

// for USD 
string result = currentBalance.ToString("C").Replace("$", "") 

// for EUR 
string result = currentBalance.ToString("C").Replace("€", "")