Double.Parse使用特定的文化

时间:2012-07-23 20:13:00

标签: c# cultureinfo currency-formatting

我正在尝试使用加蓬货币格式解析数字。

格式使用“。”用于分组而不是小数。

以下是一个例子:

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
        }
    }
}

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:3)

在你的情况下,你必须帮助.NET一点 - 当简单地使用这样的Parse时,它假设你想得到一个数字。法国文化使用,作为小数分隔符,这就是您的代码抛出异常的原因。

试试这个,而不是:

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

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

并且 - 正如其他人所说,在处理货币时你应该真正使用decimal。 Double只是not precise enough

答案 1 :(得分:1)

添加:             ci.NumberFormat.NumberGroupSeparator =“。”;