正在转换末尾带有负号的字符串中的数字
本文关键字:字符串 数字 转换 | 更新日期: 2023-09-27 18:21:43
在MSDN文档中,我应该使用NumberFormatInfo的NumberNegativePattern属性来设置负数值的预期模式。
所以我尝试了:
var format = new NumberFormatInfo {NumberNegativePattern = 3};
Console.WriteLine(Convert.ToDouble("1.000-", format));
但我总是收到一个FormatException,说"输入字符串的格式不正确。"。我还尝试使用NumberFormatInfo.InvariantInfo进行格式化,结果相同。
这里不需要格式-看起来NumberNegativePattern
只在格式化时使用,而不是解析,然后只用于N
格式。然而,这有一个NumberStyles
值:
Console.WriteLine(double.Parse("1.000-",
NumberStyles.AllowTrailingSign | NumberStyles.AllowDecimalPoint));
您的NumberFormatInfo
的NumberNegativePattern
被分配给3,但NumberFormatInfo
的其他属性将取决于CurrentCulture
。但这不是重点。
该Convert.ToDouble(String, IFormatProvider)
方法实现为;
public static double ToDouble(String value)
{
if (value == null)
return 0;
return Double.Parse(value, CultureInfo.CurrentCulture);
}
以及CCD_ 9实现为;
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
,但您可以使用带有AllowTrailingSign
样式的AllowDecimalPoint
或AllowThousands
样式作为Double.Parse(String, NumberStyles)
重载的第二个参数。