2012-05-08 77 views
1

聽起來很簡單,但是當我試圖達到我即將是如何進行這種轉換格式的股票這是我需要轉換爲十進制轉換該字符串爲十進制

00.24 
48.34 
01.24 

確實字符串的一些例子任何人都知道我該如何做到這一點?我想這樣的

try 
{ 
    decimal x = Convert.ToDecimal("00.24",); 
    //Which formatter do I need to pass?? 
    decimal x = Convert.ToDecimal("00.24", Formatter???); 
} 
Catch(Exception e) 
{ 
    throw new Exception() 
} 

,但它不工作,因爲結果是24D,我需要0.24D

+4

你嘗試過'Decimal.Parse()'嗎? –

+1

不要在catch塊中拋出一個新的異常,它會讓你失去原來的異常信息 –

+0

@ p.campbell,Decimal.Parse將與Convert.ToDecimal具有相同的效果... –

回答

5

我懷疑你的系統文化不是英語,有不同的數字格式的規則。嘗試通過固定區域性的格式提供:

decimal d = Convert.ToDecimal("00.24", CultureInfo.InvariantCulture); 

您還可以使用Decimal.Parse

decimal d = Decimal.Parse("00.24", CultureInfo.InvariantCulture); 
2

我覺得Decimal.TryParse應該工作。更多信息here

3

爲什麼不直接使用Decimal.Parse

decimal x = Decimal.Parse("00.24"); 
Console.WriteLine(x); // Prints: 00.24 
1

你得到的結果是因爲該點.被tretaed爲一組(千)分隔符。解析器只是放棄它,並不檢查組大小是否正確。所以'20 .100.200' 或‘1.2.3.4’也將得到解析爲20100200和1234

這發生在許多歐洲文化,像‘ES’

你必須使用不與任何文化考慮一個.作爲組分隔符,但作爲小數分隔符。 CultureInfo.InvariantCulture是可能的文化之一(它具有基本相同的en-US配置)。

相關問題