2010-04-22 18 views
3

我有一個TypeConverter類的問題。它適用於CultureInvariant值,但不能轉換特定的文化,如英語千分隔符。下面是一個我無法工作的小型測試程序。如何使用TypeConverter轉換文化特定的double?

以下是問題:) - ConvertFromString引發異常並顯示以下消息「2,999.95對於Double不是有效值。」和內部異常「輸入字符串格式不正確。」

using System; 
using System.Globalization; 
using System.ComponentModel; 

class Program 
{ 
    static void Main() 
    { 
     try 
     { 
      var culture = new CultureInfo("en"); 
      var typeConverter = TypeDescriptor.GetConverter(typeof(double)); 
      double value = (double)typeConverter.ConvertFromString(
       null, 
       culture, 
       "2,999.95"); 

      Console.WriteLine("Value: " + value); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Error: " + e.Message); 
     } 
    } 
} 

編輯: 鏈接到錯誤報告上Connect

+0

什麼不起作用?你得到什麼錯誤? – Oded 2010-04-22 07:39:50

+0

ConvertFromString引發異常:「2,999.95不是Double的有效值。」 – Christian 2010-04-22 07:41:18

回答

5

是從TypeDescriptor.GetConverter(typeof(double))末UPS調用Double.Parse使用以下參數獲得的DoubleConverter

Double.Parse(
    "2,999.95", 
    NumberStyles.Float, 
    (IFormatProvider)culture.GetFormat(typeof(NumberFormatInfo))); 

的問題是,NumberStyles.Float做不允許數千個分隔符,這就是爲什麼你會遇到問題。您可以在Microsoft Connect上提交此信息,或者查看是否有其他人遇到同樣的問題。

如果Double.Parse也被調用NumberStyles.AllowThousands問題不會發生。

Double.Parse(
    "2,999.95", 
    NumberStyles.Float | NumberStyles.AllowThousands, 
    (IFormatProvider)culture.GetFormat(typeof(NumberFormatInfo))); 
+0

但是這個例子與沒有任何NumberStyles的Double.Parse更緊密相關,在這種情況下Double.Parse會起作用。 剛剛將它視爲Connect上的一個錯誤。感謝您的反饋意見。 – Christian 2010-04-22 14:54:19

+0

@Christian,如果您不介意您是否可以更新您的問題並將鏈接添加到Connect問題? – 2010-04-22 15:16:51

相關問題