NumberFormatInfo nfi = new NumberFormatInfo()
{
CurrencySymbol = "$$s. ",
CurrencyGroupSeparator = ".",
CurrencyDecimalSeparator = ",",
NegativeSign = "-",
CurrencyNegativePattern = 2
};
double amount = double.Parse("$$s. 1.123,00", nfi);
最后一行抛出FormatException
,我不知道为什么。我试图解析的字符串实际上来自于:
String.Format(nfi, "{0:C}", 1123.00)
最佳答案
您并没有告诉它应该接受货币值。为此,您需要调用接受 NumberStyles
值的重载,并包含 NumberStyles.AllowCurrencySymbol
。例如:
using System;
using System.Globalization;
class Test
{
static void Main()
{
NumberFormatInfo nfi = new NumberFormatInfo()
{
CurrencySymbol = "$$s. ",
CurrencyGroupSeparator = ".",
CurrencyDecimalSeparator = ",",
NegativeSign = "-",
CurrencyNegativePattern = 2
};
double d = double.Parse("$$s. 1.123,00",
NumberStyles.Number | NumberStyles.AllowCurrencySymbol,
nfi);
Console.WriteLine(d);
}
}
请注意,货币值通常用十进制
表示比用 double
表示更好。
关于c# - string.Format(..., double) 后跟 double.Parse 使用相同的 NumberFormatInfo 会导致 FormatException。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26442338/