这应该是一个简单的问题但是......
我需要在 C# 中格式化用于显示的货币(字符串)
相关货币将有自己的规则,例如要使用的符号以及该符号是应该出现在值(value)之前(例如 $10)还是之后(例如 10₫,这是越南盾)。
但是数字的格式如何取决于本地用户,而不是货币。
例如
1.234,56 ₫ should be displayed to a user in Vietnam but
1,234.56 ₫ should be displayed to a user in the US
(格式化为代码,因此很容易看出 , 和之间的区别。)
所以代码如下
Double vietnamTotal = 1234.56;
return vietnamTotal.ToString("c");
不会工作,因为它将使用用户(或更准确地说是 CultureInfo.CurrentCulture)语言环境来设置格式和货币,因此您会得到类似 $1,123.56 的东西 - 正确使用 , 和 。但错误的符号。
Double vietnamTotal = 1234.56;
CultureInfo ci = new CultureInfo(1066); // Vietnam
return vietnameTotal.ToString("c",ci));
会给出 1.234,56 ₫ - 正确的符号,错误使用 , 和 。对于当前用户。
此帖gives more detail做正确的事,而不是怎么做。
我缺少隐藏在框架中的明显方法吗?
最佳答案
- 从用户的货币中获取
NumberFormatInfo
,并克隆它 - 将克隆格式中的
CurrencySymbol
设置为相关货币的CurrencySymbol
- 如果您想要复制货币位置(以及格式的其他一些方面),
以同样的方式设置
CurrencyPositivePattern
和CurrencyNegativePattern
。 - 使用结果进行格式化。
例如:
using System;
using System.Globalization;
class Test
{
static void Main()
{
decimal total = 1234.56m;
CultureInfo vietnam = new CultureInfo(1066);
CultureInfo usa = new CultureInfo("en-US");
NumberFormatInfo nfi = usa.NumberFormat;
nfi = (NumberFormatInfo) nfi.Clone();
NumberFormatInfo vnfi = vietnam.NumberFormat;
nfi.CurrencySymbol = vnfi.CurrencySymbol;
nfi.CurrencyNegativePattern = vnfi.CurrencyNegativePattern;
nfi.CurrencyPositivePattern = vnfi.CurrencyPositivePattern;
Console.WriteLine(total.ToString("c", nfi));
}
}
不可否认,我的控制台无法显示正确的符号,但我确定这只是由于字体问题:)
关于c# - 货币格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071273/