我正在尝试使用加蓬货币格式解析数字。
格式使用“。”用于分组而不是小数。
以下是一个例子:
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
}
}
}
我有什么遗失的吗?
答案 0 :(得分:3)
在你的情况下,你必须帮助.NET一点 - 当简单地使用这样的Parse
时,它假设你想得到一个数字。法国文化使用,
作为小数分隔符,这就是您的代码抛出异常的原因。
试试这个,而不是:
double.Parse("300.000", NumberStyles.Currency, ci).ToString("C");
现在,该字符串将被正确解析为货币,尊重您在ci
文化中指定的货币规则。
并且 - 正如其他人所说,在处理货币时你应该真正使用decimal
。 Double只是not precise enough。
答案 1 :(得分:1)
添加: ci.NumberFormat.NumberGroupSeparator =“。”;