c# - 从字符串解析为浮点数时如何修复统一FormatException?
问题描述
我有文本文件(显示为 timeFile TextAsset)。在这个文件中,我有字符串数组,带有浮点元素,每行一个。例子:
7.9483900
8.392342
1.034224
0.032424323
23.563646346
所以我是拆分(\n),每个行元素都有一个浮点元素。我有浮点数组,带有解析的行。
但后来我尝试用这个浮点数组的 y 位置实例化我的预制件,我有:
FormatException:输入字符串的格式不正确。System.Number.ParseSingle(System.String 值,System.Globalization.NumberStyles 选项,System.Globalization.NumberFormatInfo numfmt)(在:0)
如何解决?
void Start()
{
var lines = timeFile.text.Split("\n"[0]);
var linesFloat = new float[lines.Length];
for (int i=0; i<lines.Length; i++)
{
linesFloat[i] = float.Parse(lines[i], CultureInfo.InvariantCulture);
}
for (int i = 0; i<lines.Length; i++)
{
var position = new Vector3(0, linesFloat[i], -0.5f);
Instantiate(projectilePrefab, position, Quaternion.Euler(0,0,0));
}
}
我尝试CultureInfo.InvarianCulture
了 float Parse,但这对我没有帮助。
解决方案
重新检查您的输入字符串!
它们可能/很可能仍然包含一个\r
字符,因为 windows (clrf) 换行符是\r\n
或者可能也是一个空格字符。
您可以使用Trim()
以确保它们被排除在外,例如
for (int i=0; i<lines.Length; i++)
{
linesFloat[i] = float.Parse(lines[i].Trim('\r', ' '), CultureInfo.InvariantCulture);
}
如果您只想摆脱可以使用的异常TryParse
。
for (int i=0; i<lines.Length; i++)
{
if(float.TryParse(lines[i], out var floatValue))
{
linesFloat[i] = floatValue;
}
else
{
Debug.LogFormat(this, "Oops value {0} could not be parsed!", lines[i]);
}
}
另请注意,您可以简单地使用
var lines = timeFile.text.Split('\n');
如果只有一个字符
推荐阅读
- html - 黑菱形问号-Rmarkdown
- node.js - 如何在 Windows 窗体应用程序中制作 Discord Bot(NodeJS 应用程序)
- python - 如何按日期对列标题进行排序,而不考虑前两个非日期列?
- c - 在 C 中使用 scanf;%i 和 %d 在签名或未签名的问题上是否相同?
- python - 我有两个(.py)文件。当第一个程序结束时,它会自行关闭,然后打开并运行第二个程序文件。我该怎么做?
- java - java.util.ServiceConfigurationError: org.apache.juli.logging.Log: org.eclipse.jetty.apache.jsp.JuliLog 不是子类型
- tensorflow2.x - Tensorflow 2.2 和 cudnn 8.0.3 不能正常工作。它仍然在寻找 cudnn 7.6.5 dll 文件
- kubernetes - Ngnix Ingress Controller 提供长期支持
- c++ - cpp 中的递归函数给出错误“分段错误(核心转储)”
- python - 将每行中的多个 csv 元素读取到单独的列表中