2

我在这里尝试使用加蓬货币格式解析一个数字。

格式使用“.” 用于组分隔且没有小数。

这是一个例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Threading;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            CultureInfo ci = new CultureInfo("fr-FR");

            ci.NumberFormat.CurrencyGroupSeparator = ".";
            ci.NumberFormat.CurrencyDecimalDigits = 0;
            ci.NumberFormat.CurrencySymbol = "CFA";

            Thread.CurrentThread.CurrentCulture = ci;
            Thread.CurrentThread.CurrentUICulture = ci;

            double.Parse("300.000", ci).ToString("C"); 
                    // gives me a FormatException
        }
    }
}

有什么我想念的吗?

4

2 回答 2

3

在您的情况下,您必须对 .NET 有所帮助 -Parse像这样简单地使用时,它假定您想要获得一个数字。法国文化,用作小数分隔符,这就是您的代码引发异常的原因。

试试这个,而不是:

double.Parse("300.000", NumberStyles.Currency, ci).ToString("C");

现在,字符串将被正确解析为货币,遵守您在ci文化中指定的货币规则。

而且 - 正如其他人所说,decimal在处理货币时你应该真正使用。Double 根本不够精确

于 2012-07-23T20:21:17.707 回答
1

添加这个:ci.NumberFormat.NumberGroupSeparator = ".";

于 2012-07-23T20:23:01.973 回答