2

我通常会使用这个:

double test = 1234.5678;
Console.WriteLine(test.ToString("C"));

效果很好。我对加元进行了“覆盖”,以确保人们能看到美元和加元之间的差异:

var canadaFi = (NumberFormatInfo)CultureInfo.GetCultureInfo("en-CA").NumberFormat.Clone();
canadaFi.CurrencySymbol = "C$ ";
Console.WriteLine(val.ToString("C", canadaFi));

但现在人们要求输出如下:

1234,56 加元

所以我用:

RegionInfo ca = new RegionInfo("en-CA");
Console.WriteLine(string.Format("{0} {1}", ca.ISOCurrencySymbol, test.ToString("f2")));

这可行,但我想知道这是否是在浮点/双精度前获取 3 char iso 货币符号的最佳方法。所以不是使用CultureInfo我现在必须使用的RegionInfo吗?

4

2 回答 2

3

正确的方法是:

const string canada = "en-CA";

var ca = new RegionInfo(canada);
var cai = new CultureInfo(canada)
{
    NumberFormat =
    {
        CurrencySymbol = ca.ISOCurrencySymbol,
        CurrencyPositivePattern = 2,
        CurrencyNegativePattern = 12
    }
};

Console.WriteLine(test.ToString("C", cai));

如果你设置CurrencyPositivePattern = 2你确保,符号放在数字前面有一个额外的空格(另请参阅CurrencyPositivePattern 的文档),CurrencyNegativePattern = 12对负值执行相同的操作(CurrencyNegativePattern 的文档)。

输出:

1,234.57 加元

而对于负

加元 -1,234.57

于 2016-05-23T11:03:53.480 回答
0

正如@Corak 解释的那样:

CultureInfo cai = new CultureInfo("en-CA");
RegionInfo ca = new RegionInfo("en-CA");
Console.WriteLine(ca.ISOCurrencySymbol + " " + test.ToString("C", cai).Substring(1));

输出:

1,234.57 加元

@Coraks 建议添加:

Console.WriteLine(ca.ISOCurrencySymbol + " " + test.ToString("C", cai).Replace(cai.CurrencySymbol, ""));
于 2016-05-23T10:35:25.693 回答