繁体   English   中英

从字符串解析为float时如何修复unity FormatException?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM