2014-09-12 79 views
0

转换数从MSDN文档,我应该使用的NumberFormatInfoNumberNegativePattern属性设置为负数值预期的模式。字符串与负号在结束

所以,我想:

var format = new NumberFormatInfo {NumberNegativePattern = 3}; 
Console.WriteLine(Convert.ToDouble("1.000-", format)); 

但我总是收到一个出现FormatException说:“输入字符串的不正确的格式。”我也试着用格式化NumberFormatInfo.InvariantInfo - 具有相同的结果。

+0

zh-CN因此实际值为-1 – moik 2014-09-12 13:39:00

回答

4

这里不需要格式 - 它看起来像NumberNegativePattern只用于格式化,不解析,然后只用于N格式。然而,有此一NumberStyles值:

Console.WriteLine(double.Parse("1.000-", 
    NumberStyles.AllowTrailingSign | NumberStyles.AllowDecimalPoint)); 
2

NumberFormatInfoNumberNegativePattern分配到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与千个分隔符,但你可以使用AllowDecimalPointAllowThousands样式AllowTrailingSign风格的Double.Parse(String, NumberStyles) overload第二个参数。