在MSDN文档中,我应该使用 NumberFormatInfo 的 NumberNegativePattern 属性来设置负数值的预期模式。
所以我试过了:
var format = new NumberFormatInfo {NumberNegativePattern = 3};
Console.WriteLine(Convert.ToDouble("1.000-", format));
但是我总是收到一个 FormatException ,说“输入字符串的格式不正确。”。我也尝试使用 NumberFormatInfo.InvariantInfo 进行格式化 - 结果相同。
答案 0 :(得分:5)
这里不需要格式 - 看起来NumberNegativePattern
仅用于格式化,而不是解析,然后仅用于N
格式。但是,此值为NumberStyles
:
Console.WriteLine(double.Parse("1.000-",
NumberStyles.AllowTrailingSign | NumberStyles.AllowDecimalPoint));
答案 1 :(得分:2)
您的NumberFormatInfo
NumberNegativePattern
已分配给3,但NumberFormatInfo
的其他属性将取决于您的CurrentCulture
。但那并非如此。
此Convert.ToDouble(String, IFormatProvider)
方法implemented as;
public static double ToDouble(String value)
{
if (value == null)
return 0;
return Double.Parse(value, CultureInfo.CurrentCulture);
}
和Double.Parse(String, IFormatProvider)
实施为;
public static double Parse(String s, IFormatProvider provider)
{
return Parse(s, NumberStyles.Float| NumberStyles.AllowThousands, NumberFormatInfo.GetInstance(provider));
}
并且NumberStyles.Float
没有NumberStyles.AllowTrailingSign
,这就是您的代码抛出FormatException
的原因。
很难说1.000
值为1
小数点或1000
小千位分隔符,但您可以使用AllowDecimalPoint
或AllowThousands
AllowTrailingSign
样式的样式作为Double.Parse(String, NumberStyles)
overload的第二个参数。