在CSharp中解析浮点数的最佳方法是什么?我知道TryParse,但我特别想知道的是点,逗号等.
我的网站有问题.在我的开发服务器上,','代表小数,'.' 用于分隔符.但是在prod服务器上,它是相反的.我怎样才能最好地抓住这个?
我同意leppie的回复; 把它放在代码方面:
string s = "123,456.789"; float f = float.Parse(s, CultureInfo.InvariantCulture);
取决于输入来自何处.
如果您的输入来自用户,则应使用用户/页面正在使用的CultureInfo(Thread.CurrentThread.CurrentUICulture).
您可以通过查看HttpRequest.UserLanguages属性来获取和指示用户的文化.(不正确100%,但我发现它是一个非常好的第一个猜测)有了这些信息,你可以在页面的开头设置Thread.CurrentThread.CurrentUICulture.
如果您的输入来自内部源,则可以使用InvariantCulture来解析字符串.
如果输入来自受控源,则Parse方法更容易使用.也就是说,您已经验证了字符串.如果Parse失败,Parse会抛出(慢)异常.
如果输入不受控制(来自用户或其他Internet源),TryParse对我来说看起来更好.
如果您希望持久值(数字,日期,时间等)用于内部目的.每次使用"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);
你总是可以使用包含文化的Parse的重载吗?
例如:
double number = Double.Parse("42,22", new CultureInfo("nl-NL").NumberFormat); // dutch number formatting
如果您可以控制所有数据,则应在所有代码中使用"CultureInfo.InvariantCulture".