我需要將string
解析爲decimal
,它可能用於英國或歐洲文化。C#Decimal.Parse逗號問題
如果在歐洲文化2,00
將2
但是,2,00
將作爲一個逗號表示千在英國文化無效。
如果我使用
Double.Parse("20,50", new CultureInfo("en-GB"))
返回2050
我本來期望這引發無效異常。
任何人都可以幫忙嗎?
我需要將string
解析爲decimal
,它可能用於英國或歐洲文化。C#Decimal.Parse逗號問題
如果在歐洲文化2,00
將2
但是,2,00
將作爲一個逗號表示千在英國文化無效。
如果我使用
Double.Parse("20,50", new CultureInfo("en-GB"))
返回2050
我本來期望這引發無效異常。
任何人都可以幫忙嗎?
你應該不會得到一個異常,因爲,
是解析字符串中的一個有效字符(正如你所說,它被解釋爲千位分隔符)。
但是,我看到2050
爲同一段代碼,而不是20.50
。
我希望看到你的結果爲en-GB
文化只有那些已經在該區域的控制面板被手動更改(所以如果有人設置小數點分隔符,
和千位分隔符的東西,是不是,
) 。
我認爲這個問題是:爲什麼這個代碼工作?不是如何解決它:) –
@lcfseth - 夠公平。但是這同樣對我不起作用。 – Oded
從更新的問題,我可以告訴大家,英國文化posiibly使用,
字符作爲一個可能的地方分隔符,如2,000
站立2000
,並2,000,000
爲2000000
。但它也可以像2,0,0,0
,它仍然是2000
。
從這個角度看有三種可能的情況:
關鍵是,最終我將使用CurrentCulture或UI文化,而不是新的,所以我不知道這是否會有所幫助。 – sianabanana
我已經更新了答案。 –
問題是,GB culutre中的「2,00」應該是無效的,但它解析它像使用歐洲文化一樣。
我希望它拋出異常。
相反 - Double.Parse(「20.50」,new CultureInfo(「fr-FR」))會引發一個異常,因爲小數位無效。
那麼爲什麼這不是真的雙。解析(「20,50」,new CultureInfo(「en-GB」))
我得到'2050',而不是'20.50'。你是否在控制面板中更改了英國區域設置的設置,並將小數點分隔符設置爲','? – Oded
我在控制面板中的默認設置是英語(英國)和十進制符號。 – sianabanana
即使你得到2050,就im而言,這仍然是不正確的,它應該把它作爲無效格式扔掉。 – sianabanana