当前位置:  开发笔记 > 编程语言 > 正文

解析浮点数的最佳方法?

如何解决《解析浮点数的最佳方法?》经验,为你挑选了4个好方法。

在CSharp中解析浮点数的最佳方法是什么?我知道TryParse,但我特别想知道的是点,逗号等.

我的网站有问题.在我的开发服务器上,','代表小数,'.' 用于分隔符.但是在prod服务器上,它是相反的.我怎样才能最好地抓住这个?



1> Marc Gravell..:

我同意leppie的回复; 把它放在代码方面:

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



2> GvS..:

取决于输入来自何处.

如果您的输入来自用户,则应使用用户/页面正在使用的CultureInfo(Thread.CurrentThread.CurrentUICulture).

您可以通过查看HttpRequest.UserLanguages属性来获取和指示用户的文化.(不正确100%,但我发现它是一个非常好的第一个猜测)有了这些信息,你可以在页面的开头设置Thread.CurrentThread.CurrentUICulture.

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

如果输入来自受控源,则Parse方法更容易使用.也就是说,您已经验证了字符串.如果Parse失败,Parse会抛出(慢)异常.

如果输入不受控制(来自用户或其他Internet源),TryParse对我来说看起来更好.



3> TcKs..:

如果您希望持久值(数字,日期,时间等)用于内部目的.每次使用"InvariantCulture"来形成和解析值."InvariantCulture"在每台计算机上都是相同的,每个操作系统都有任何用户的文化/语言/等等......

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);



4> Davy Landman..:

你总是可以使用包含文化的Parse的重载吗?

例如:

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

如果您可以控制所有数据,则应在所有代码中使用"CultureInfo.InvariantCulture".

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有