考虑,如果你有其中的文化负号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对象。
由于您刚刚编辑了问题。 'int32.Parse(String,IFormatProvider)'允许你传递'NumberStyles.AllowThousand'并使用当前的文化,如果没有提供。 – Habib
不,这是一种不同的方法,即'int32.Parse(String,NumberStyles)'或'int32.Parse(String,NumberStyles,IFormatProvider)'。我明确地询问是否存在用于不能指定'NumberStyles'的方法的用例。 –
刚编辑答案。看看它现在是否有用。 – Habib