2012-10-01 43 views
3

我需要將string解析爲decimal,它可能用於英國或歐洲文化。C#Decimal.Parse逗號問題

如果在歐洲文化2,002

但是,2,00將作爲一個逗號表示千在英國文化無效。

如果我使用

Double.Parse("20,50", new CultureInfo("en-GB")) 

返回2050

我本來期望這引發無效異常。

任何人都可以幫忙嗎?

+1

我得到'2050',而不是'20.50'。你是否在控制面板中更改了英國區域設置的設置,並將小數點分隔符設置爲','? – Oded

+0

我在控制面板中的默認設置是英語(英國)和十進制符號。 – sianabanana

+0

即使你得到2050,就im而言,這仍然是不正確的,它應該把它作爲無效格式扔掉。 – sianabanana

回答

3

應該不會得到一個異常,因爲,是解析字符串中的一個有效字符(正如你所說,它被解釋爲千位分隔符)。

但是,我看到2050爲同一段代碼,而不是20.50

我希望看到你的結果爲en-GB文化只有那些已經在該區域的控制面板被手動更改(所以如果有人設置小數點分隔符,和千位分隔符的東西,是不是,) 。

+2

我認爲這個問題是:爲什麼這個代碼工作?不是如何解決它:) –

+0

@lcfseth - 夠公平。但是這同樣對我不起作用。 – Oded

0

從更新的問題,我可以告訴大家,英國文化posiibly使用,字符作爲一個可能的地方分隔符,如2,000站立2000,並2,000,0002000000。但它也可以像2,0,0,0,它仍然是2000

從這個角度看有三種可能的情況:

  1. 你總是在本地格式recieving數據,那麼就沒有問題,你只是解析字符串,因爲它是(但有一個疑難雜症 - 用戶可以更改字符串格式選項,以便更好地創建新的默認本地文化)。
  2. 您正在以預定義的格式接收數據,然後使用一些固定的文化來解析字符串。
  3. 您以相對本地的未知格式接收數據,即您可以接收本地和非本地文化格式。這是最糟糕的情況,並沒有通用的解決方案。我建議減少這種情況2或1,這取決於這項任務更容易。
+0

關鍵是,最終我將使用CurrentCulture或UI文化,而不是新的,所以我不知道這是否會有所幫助。 – sianabanana

+0

我已經更新了答案。 –

0

問題是,GB culutre中的「2,00」應該是無效的,但它解析它像使用歐洲文化一樣。

我希望它拋出異常。

相反 - Double.Parse(「20.50」,new CultureInfo(「fr-FR」))會引發一個異常,因爲小數位無效。

那麼爲什麼這不是真的雙。解析(「20,50」,new CultureInfo(「en-GB」))