格式化一个像货币但没有货币符号的双值(C#)

我给一个文本框提供一个string值,显示出需要格式化的余额。

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

我可以使用value.ToString(“c”),但是这会把货币符号放在它的前面。

任何想法如何我会操纵string之前喂文本框来实现上述格式?

我试过了,没有成功:

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

非常感谢,

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

如果货币格式正确地提供了您想要的内容,请将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)); } } 

另一种select是使用自定义的数字格式的string – 这取决于您是否真正想要反映货币的外观,只是没有符号,或控制数字的确切位置。

你有没有尝试过:

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

这是等同于:

 currentBalance.ToString("N2"); 

string result = string.Format(“{0:N2}”,value); //对于像### ### ##。##

您可以使用组分隔符和节分隔符来做到这一点,如下所示:

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

这不会像@JonSkeet的答案那样考虑到文化差异,但是这样做确实可以模仿小数位,四舍五入,数千分隔和负数处理,即使用单个自定义格式string生成的en-US文化货币格式。

.NET小提琴演示

 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 

这可能是矫枉过正,但它轮stream,格式…

 @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> } 

这个简单的解决scheme适合我用美元货币。

如果不需要国际货币支持,可以使用这个,并用要删除的货币符号代替$:

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

要么

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