解析漂浮的最佳方式?(Best way to parse float?)

2019-07-19 15:27发布

什么是解析在C#一个浮动的最好方法? 我知道的TryParse,但是我特别想知道的是点,逗号等。

我有我的网站的问题。 在我的dev的服务器中,“”是小数,在“” 为分隔符。 上虽然督促服务器,它是倒过来。 我怎样才能最有效地获得这个?

Answer 1:

取决于其中输入的来源。

如果你的输入来自用户,你应该使用用户/页使用的CultureInfo( Thread.CurrentThread.CurrentUICulture )。

你可以和用户的文化标志,通过看HttpRequest.UserLanguages财产。 (不正确100%,但我发现这是一个非常良好的第一猜测),有了这些信息,您可以设置Thread.CurrentThread.CurrentUICulture在页面的开始。

如果你的输入来自内部源,您可以使用InvariantCulture的解析字符串。

解析方法是比较容易使用,如果你的输入来自受控源。 也就是说,你已经验证字符串。 如果未能解析抛出一个(慢)例外。

如果输入的是不受控制的,(从用户或其他Internet源)中的TryParse看起来不如我。



Answer 2:

我同意leppie的答复; 把在代码方面:

string s = "123,456.789";
float f = float.Parse(s, CultureInfo.InvariantCulture);


Answer 3:

你总是可以使用的过载解析 ,其中包括培养使用?

例如:

double number = Double.Parse("42,22", new CultureInfo("nl-NL").NumberFormat); // dutch number formatting

如果您有您所有数据的控制,你应该在所有的代码中使用“CultureInfo.InvariantCulture”。



Answer 4:

如果你想坚持内部用途值(数字,日期,时间等)。 每次使用“InvariantCulture的”为格式化和解析值。 “InvariantCulture的”是每台计算机上一样,每个OS与任何用户的文化/语言/等...

string strFloat = (15.789f).ToString(System.Globalization.CultureInfo.InvariantInfo);
float numFloat  = float.Parse(System.Globalization.CultureInfo.InvariantInfo, strFloat);
string strNow   = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantInfo);
DateTime now    = DateTime.Parse(System.Globalization.CultureInfo.InvariantInfo, strNow);


Answer 5:

与尝试/解析解析时,请使用中性文化(或您认识的人)。



Answer 6:

传递一个CultureInfo的或的NumberFormatInfo表示要为解析浮动的文化; 这个控制使用哪些字符小数,组分隔符等等。

例如,要确保“” 字符被视为你可以通过在CultureInfo.InvariantCulture小数指标(这是一个典型的在你会想要的东西是环境文化的同时,不论服务器应用程序非常有用)。



Answer 7:

尽量避免float.Parse,使用的TryParse而是因为它执行好了很多,但做相同的工作。 这也适用于翻番,日期时间等...

(部分型号还提供TryParseExact还执行得更好!)



Answer 8:

源是从一个网站的输入。 我不能依赖它是有效的。 所以我去的TryParse如前所述。 但我无法弄清楚如何给的CurrentCulture它。

此外,这会给我它目前运行在服务器上的文化,但因为它是万维网,用户可以从任何地方...



Answer 9:

你就可以知道一个简单的语句服务器的当前Cuklture:

System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CurrentCulture;

请注意,有ID的CurrentUICulture属性,但的UICulture从ResourceMeanager形式MULTILANGUAGES应用。 为数字格式,您必须considere的CurrentCulture。

我希望这能帮到您



Answer 10:

既然你不知道网络用户的文化,你可以做一些猜测。 与使用,用于隔离和文化的TryParse。 为十进制和的TryParse与使用的文化。 用于分离和小数。 如果他们都成功,但得到不同的答案,那么你要问他们想要的用户。 否则,你可以给你的两个相等的结果或一个可用的结果或没有可用的结果正常进行。



文章来源: Best way to parse float?