【发布时间】:2010-11-06 03:01:27
【问题描述】:
我给一个文本框输入了一个字符串值,显示了一个需要像这样格式化的余额:
###,###,###,##0.00
我可以使用 value.ToString("c"),但这会将货币符号放在它前面。
知道在输入文本框之前如何操作字符串以实现上述格式吗?
我试过了,没有成功:
String.Format("###,###,###,##0.00", currentBalance);
非常感谢,
【问题讨论】:
我给一个文本框输入了一个字符串值,显示了一个需要像这样格式化的余额:
###,###,###,##0.00
我可以使用 value.ToString("c"),但这会将货币符号放在它前面。
知道在输入文本框之前如何操作字符串以实现上述格式吗?
我试过了,没有成功:
String.Format("###,###,###,##0.00", currentBalance);
非常感谢,
【问题讨论】:
如果货币格式完全符合您的要求,请克隆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));
}
}
当然,另一种选择是使用自定义数字格式字符串 - 这取决于您是否真的想准确地反映货币的外观,只是没有符号,或者控制数字的确切位置。
【讨论】:
string forDisplay = currentBalance.ToString("N2");
【讨论】:
NumberFormatInfo 作为根据 Jon 的回答,(2) 使用自定义格式字符串,或 (3) 调用 ToString("c"),然后进行后处理以删除符号。
你试过了吗:
currentBalance.ToString("#,##0.00");
这是长期等价的:
currentBalance.ToString("N2");
【讨论】:
string result=string.Format("{0:N2}", value); //对于像### ### ##.##这样的结果
【讨论】:
您可以使用the group separator 和the section separator 执行此操作,如下所示:
currentBalance.ToString("#,0.00;(#,0.00)");
这并没有像@JonSkeet 的回答那样考虑文化差异,但这确实模仿了使用单个自定义格式字符串产生的 en-US 文化货币格式产生的小数位、四舍五入、千位分隔和负数处理。
【讨论】:
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
【讨论】:
var result = currentBalance.ToString("C").Replace(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol, "");
【讨论】:
这可能有点矫枉过正,但它会四舍五入、格式化......
@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>
}
【讨论】:
这个简单的解决方案适用于我的美元货币。
如果不需要国际货币支持,请使用此选项并将 $ 替换为要删除的货币符号:
// for USD
string result = currentBalance.ToString("C").Replace("$", "")
或
// for EUR
string result = currentBalance.ToString("C").Replace("€", "")
【讨论】: