是否有用于格式化某个国家/地区的正确货币代表的库?
实施例 英国 - 127.54英镑 荷兰€127,54- 美国$ 127.54
等。
有些事情要考虑,
货币符号
货币符号展示位置 - 可以 在...之前或之后 位数。
负数量显示
答案 0 :(得分:81)
尝试Currency Format Specifier(“C”)。它会自动考虑当前的UI文化并相应地显示货币值。
您可以将其与String.Format
或重载的ToString
方法一起用于数字类型。
例如:
double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));
Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));
Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK")));
// The example displays the following output on a system whose
// current culture is English (United States):
// $12,345.68
// $12,345.679
// kr 12.345,679
答案 1 :(得分:28)
内置了这种功能。
使用小数时,您可以使用format string“C”或“c”。
decimal dec = 123.00M;
string uk = dec.ToString("C", new CultureInfo("en-GB")); // uk holds "£123.00"
string us = dec.ToString("C", new CultureInfo("en-US")); // us holds "$123.00"
答案 2 :(得分:17)
答案 3 :(得分:5)
获取给定数字并使用.ToString(“C”,culture)显示它的问题在于它有效地将金额更改为给定文化的默认货币。如果您有一个给定的金额,该金额的ISO货币代码,并且您希望为给定的文化显示它,我建议您只创建一个十进制扩展方法,如下所示。这不会自动假设货币是文化的默认货币:
public static string ToFormattedCurrencyString(
this decimal currencyAmount,
string isoCurrencyCode,
CultureInfo userCulture)
{
var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol;
if (userCurrencyCode == isoCurrencyCode)
{
return currencyAmount.ToString("C", userCulture);
}
return string.Format(
"{0} {1}",
isoCurrencyCode,
currencyAmount.ToString("N2", userCulture));
}
这将使用本地货币符号或ISO货币代码与金额 - 以更合适的为准。有关in this blog post主题的更多信息。
答案 4 :(得分:2)
此代码 - (将货币设置为GB(英国/英国/英格兰/英镑)然后打印一行。然后将货币设置为US / $并打印一行)
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB",false);
Console.WriteLine("bbbbbbb {0:c}",4321.2);
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US",false);
Console.WriteLine("bbbbbbb {0:c}",4321.2);
将显示 -
bbbbbbb £4,321.20
bbbbbbb $4,321.20
有关文化名称的列表,例如en-GB en-US e.t.c.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx
答案 5 :(得分:1)
如果只有货币符号和小数位数,则可以使用以下帮助器功能,该功能尊重符号/金额顺序,分隔符等,仅更改货币符号本身和要显示的小数位数
public static string FormatCurrency(string currencySymbol, Decimal currency, int decPlaces)
{
NumberFormatInfo localFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
localFormat.CurrencySymbol = currencySymbol;
localFormat.CurrencyDecimalDigits = decPlaces;
return currency.ToString("c", localFormat);
}
答案 6 :(得分:-4)
public static string ToFormattedCurrencyString(
this decimal currencyAmount,
string isoCurrencyCode,
CultureInfo userCulture)
{
var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol;
if (userCurrencyCode == isoCurrencyCode)
{
return currencyAmount.ToString("C", userCulture);
}
return string.Format(
"{0} {1}",
isoCurrencyCode,
currencyAmount.ToString("N2", userCulture));
}