如何使用货币符号将字符串解析为小数?

18

我不知道为什么这不起作用:

string s = "12,00 €";
var germanCulture = CultureInfo.CreateSpecificCulture("de-DE");
decimal d;
if (decimal.TryParse(s, NumberStyles.AllowCurrencySymbol, germanCulture, out d))
{
    // i want to get to this point
    Console.WriteLine("Decimal value: {0}", d);
}
3个回答

30

使用NumberStyles.Currency而不是NumberStyles.AllowCurrencySymbol

if (decimal.TryParse(s, NumberStyles.Currency, germanCulture, out d))

你的代码输出为:

Decimal value: 12.00

8
稍微补充一些信息来解释为什么会这样: NumberStyles.AllowCurrencySymbol 只允许货币符号在解析过程中被忽略。额外的空格和小数分隔符需要额外的标志来启用:AllowDecimalPoint 和 AllowTrailingWhite。Currency 结合了这些标志(还有其他一些)链接 - Eric MSFT

0

试试这个;

 string.Format(new CultureInfo("en-SG", false), "{0:c0}", 123423.083234);

它将把123423.083234转换为$1,23,423格式。

1
我需要解析一个包含货币符号的字符串为小数。你正在将给定的小数转换为字符串。所以这是一个不同的需求。然而,它已经得到了回答。 - Tim Schmelter

0
请注意,目前此方法还无法使用比特币符号和其他加密货币符号。我已经试过两种方式。
Sharplab 证明:link 在我的情况下(我有一个减号后面跟着比特币 ฿ 符号),解决方法是对字符串进行 .Where() 操作,忽略除数字和减号之外的所有内容...但如果你想要一般性的验证...那么你就必须在某个地方硬编码这些比特币等符号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接