2014-09-12 62 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第二個參數。