[英]How to fix unity FormatException when parse from string to float?
我有文本文件(表示为timeFile TextAsset)。 在这个文件中,我有一个字符串数组,带有浮点元素,每行一个。 例:
7.9483900
8.392342
1.034224
0.032424323
23.563646346
因此,我进行了split(\\ n),每个line元素都有一个float元素。 我有浮点数组,具有解析的行。
但是然后我尝试使用此浮点数组的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));
}
}
我在float Parse中尝试过CultureInfo.InvarianCulture
,但这并没有帮助我。
重新检查您的输入字符串!
可能/可能它们仍然包含\\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');
如果只有一个字符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.