c# - 如何解析带有欧元货币符号的数字字符串?
问题描述
我无法让 decimal.TryParse 方法适用于带有欧元符号的货币。我已经尝试将符号放在末尾和空格后无济于事。我还尝试了不同的文化(“fr-FR”、“de-DE”)和数字样式(“Any”将它们全部组合在一起,除了十六进制)。尽管文化显示匹配的货币符号,但该方法失败。使用货币符号解析值SO 解决方案不起作用。
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
var value = "€5,432,109.876";
var cultureInfo = CultureInfo.CreateSpecificCulture("de-DE");
decimal result;
if (!decimal.TryParse(value, NumberStyles.Any, cultureInfo, out result))
{
Console.WriteLine(string.Format("Unable to parse '{0}' as a number using the '{1}' culture with currency symbol '{2}'.", value, cultureInfo.IetfLanguageTag, cultureInfo.NumberFormat.CurrencySymbol));
return;
}
Console.WriteLine(result.ToString(cultureInfo));
}
}
这是上面的一个小提琴。
更新
恕我直言,建议的.NET:解析本地化货币和我研究的另一种货币并没有扩展问题的根源在于文化必须匹配数字格式的所有方面——感谢 @Zero0 和 @Dai 的扩展尽可能多的评论和接受的答案。
并不是说这不是我对其他货币格式的无知,而是看到这个问题被否决了暗示在这个领域几乎不能容忍错误。鉴于我在答案和评论中发现有价值的问题,我会继续发布问题——其他人也可以。
解决方案
改变
var cultureInfo = CultureInfo.CreateSpecificCulture("de-DE");
到
var cultureInfo = CultureInfo.CreateSpecificCulture("en-IE");
输出:
5432109.876
编辑:
正如评论中提到的,这是因为文化的逗号数字分组。这个答案恰好匹配(所以它有效),但我同意同样重要的是要注意为什么这种文化在其他人不适用的情况下有效。
推荐阅读
- c# - 将参数分配给 List
- excel - 如何选择一系列单元格直到特定值
- authentication - 微服务的去中心化身份验证
- python - 如何在 Gurobi 中线性化约束
- python-3.x - Atom 脚本在 Mac 上找不到 Python 3 的路径
- reactjs - 什么时候使用没有依赖的 useEffect?
- .net - TransactionScope 需要在 C# MVC 中启用 DTC
- spring - hibernate回滚错误信息不清楚
- c# - 无法从访问数据库中获取数据
- java - FCM:使用 Java 服务器设置 TTL(“time_to_live”或寿命)属性(Google 文档错误/不清楚)