c# - 使用特定文化的 Double.Parse

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

我有什么遗漏的吗?

最佳答案

就你的情况而言,你必须帮助 .NET 一点 - 当简单地使用 Parse 时,它假设你想要获取一个数字。法国文化使用 , 作为小数点分隔符,这就是您的代码引发异常的原因。

试试这个:

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

现在,该字符串将被正确解析为货币,并遵守您在 ci 区域性中指定的货币规则。

并且 - 正如其他人所说,在处理货币时您应该真正使用十进制。 Double 就是 not precise enough .

关于c# - 使用特定文化的 Double.Parse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619796/

相关文章:

c# - 将 TFS WorkItem Assigned-To 和 Created-By 解析为电子邮件地址

regex.replace() 中的 C# 多个模式

c# - 使用 foreach 遍历通用列表

c# - 为同义词表创建字符变异算法

c# - 获取独立于文化(区域设置)的 WMI 属性

Java:使用次要货币符号格式化金额

ios - 我在文本字段中做错了什么,结束编辑了吗?货币格式

.net - 根据文化寻找周末

c# - 如何将英文数字转换为阿拉伯数字?

java - 如何在格式化值时避免由 NumberFormat(Locale).format() 方法完成的自动舍入?