我有一个文本文件,我用它来输入信息到我的应用程序.问题是一些值是浮点数,有时它们是空的,这就是我得到一个例外的原因.
var s = "0.0";
var f = float.Parse(s);
Run Code Online (Sandbox Code Playgroud)
上面的代码在第2行抛出异常"输入字符串的格式不正确."
我相信解决方案将是float.Parse的高级重载,其中包括IFormatProvider作为参数,但我还不知道它.
我如何解析"0.0"?
ina*_*ruk 27
点符号"." 不用作分隔符(这取决于文化设置).因此,如果您想要绝对确定正确解析了点,您需要编写如下内容:
CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone();
ci.NumberFormat.CurrencyDecimalSeparator = ".";
avarage = double.Parse("0.0",NumberStyles.Any,ci);
Run Code Online (Sandbox Code Playgroud)
您可以先检查null或空字符串.
您还可以使用Parse(甚至使用TryParse)重载之一来提供更具体的控制.
例如,使用不变文化进行检查,以避免使用非用户可见数据(例如来自A2A通信)的小数分隔符变体:
float SafeParse(string input) {
if (String.IsNullOrEmpty(input)) { throw new ArgumentNullException("input"); }
float res;
if (Single.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out res)) {
return res;
}
return 0.0f; // Or perhaps throw your own exception type
}
Run Code Online (Sandbox Code Playgroud)
以下为我工作:
string stringVal = "0.0";
float floatVal = float.Parse(stringVal , CultureInfo.InvariantCulture.NumberFormat);
Run Code Online (Sandbox Code Playgroud)
相反的情况(适用于所有国家):
float floatVal = 0.0f;
string stringVal = floatVal.ToString("F1", new CultureInfo("en-US").NumberFormat);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24909 次 |
| 最近记录: |