格式化一个像货币但没有货币符号的双值(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("€", "")