2013-10-01 48 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

相关问题