2013-10-01 49 views
1

什麼時候可以使用int32.Parse(String, IFormatProvider)int32.Parse(String,IFormatProvider)通過int32.Parse(String)的用例是什麼?

據我所知,這和int32.Parse(String)使用NumberStyles.Integer無論如何,它只允許一個加號,減號或數字,可選地被空白包圍,所以爲什麼區域設置格式輸入等式?

我知道大約一千個分隔符,但他們並不重要,因爲NumberStyles.Integer不允許他們,不管你的地區。

+0

由於您剛剛編輯了問題。 'int32.Parse(String,IFormatProvider)'允許你傳遞'NumberStyles.AllowThousand'並使用當前的文化,如果沒有提供。 – Habib

+0

不,這是一種不同的方法,即'int32.Parse(String,NumberStyles)'或'int32.Parse(String,NumberStyles,IFormatProvider)'。我明確地詢問是否存在用於不能指定'NumberStyles'的方法的用例。 –

+0

剛編輯答案。看看它現在是否有用。 – Habib

回答

7

考慮,如果你有其中的文化負號M(負)。我很確定它不存在,但只是認爲你有這樣的事情。那麼你可以這樣做:

string str = "M123"; 
var culture = new CultureInfo("en-US"); 
culture.NumberFormat.NegativeSign = "M"; 
int number = Int32.Parse(str, culture); 

這將導致-123作爲值。這是您可以使用int32.Parse(String, IFormatProvider)過載的地方。如果你沒有指定文化,那麼它會使用當前的文化,並會失敗的價值M123


(舊答)

它與串千分

請看下面的例子是有用的,

string str = "1,234,567"; 
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); 
int number = Int32.Parse(str, CultureInfo.CurrentCulture); 

這將導致由於一個異常.是德國文化中的千位分隔符。

對於

int number = Int32.Parse("1.234", NumberStyles.AllowThousands); 

以上會成功的解析,因爲德國文化使用.作爲千位分隔符。

但是,如果您將當前的文化設置爲美國,那麼它會給出例外。

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
int number = Int32.Parse("1.234", NumberStyles.AllowThousands); 

參見:Int32.Parse Method (String, IFormatProvider)

提供者參數是一個實施的IFormatProvider,如 一個的NumberFormatInfo或CultureInfo對象。提供者參數 提供關於s格式的文化特定信息。如果 提供程序爲空,則使用當前區域 的NumberFormatInfo對象。

+1

但是,如果您使用該點,它也會引發異常。 –

+0

@TimSchmelter,是的,你必須明確允許千位分隔符。像'int number2 = Int32.Parse(「1.234」,NumberStyles.AllowThousands);' – Habib

+0

這就是我的問題 - 重載是什麼使_not_讓你指定NumberStyle,但允許你指定的文化? –

2

那千位分隔符怎麼樣? 我想在美國他們使用','而在希臘他們使用'。'

美國:100萬 希臘:1.000.000

+0

這不是答案,因爲只有'IFormatProvider'的重載也不會解析分隔符。 – Dialecticus

相關問題