【问题标题】:float.Parse no longer working in Unity (C#)float.Parse 不再在 Unity (C#) 中工作
【发布时间】:2018-05-18 16:55:46
【问题描述】:

我有一个使用以下代码行的工作项目

 public InputField mass;
 float val = float.Parse(mass.text);

非常简单,用户输入了大量的质量,然后将其从文本解析为浮点数,这在几天前工作得非常好,我什至能够多次导出项目,没有任何问题。

今天我回来做一些改变,在做之前我测试了它并得到了这个错误。

FormatException:格式无效。 System.Double.Parse (System.String s, NumberStyles 样式,IFormatProvider 提供程序)(在 /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Double.cs:209) System.Single.Parse (System.String s) (在 /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Single.cs:183) ControlMasa.Update () (在 Assets/Scripts/ControlMasa.cs:47)

我不知道它为什么突然停止工作,而不是我更新了 Unity 的版本或其他任何东西,一天它可以工作,而下一次它就不行了。

有什么问题,我该怎么办?

【问题讨论】:

  • mass.text的值是多少?

标签: c# parsing unity3d


【解决方案1】:

您没有分配 FormatProvider,这可能会导致错误,具体取决于您的系统。你可以试试

float var = float.Parse(mass.text, CultureInfo.InvariantCulture);

鉴于 mass.text 将始终是一个有效的浮点数。在处理 Unity 时,您可能还想尝试

float var = float.Parse(mass.text, new CultureInfo("en-US").NumberFormat);

它将始终以标准美国格式(带点)解析浮点数。

但是,您的代码中可能还存在其他问题,例如也许字符串并不总是可解析的浮点数,您可能想改用 TryParse 或确保它始终可以解析为浮点表示。

【讨论】:

    【解决方案2】:

    根据你的问题

    InputField mass = null; // assign this first
    float mass_ = "0.1f" //sample value
    if(float.TryParse(mass.text, out mass_))
    {
        /// everything is ok
    }
    else
    {
        /// something wrong. mass.text has incorrect float value
    }
    

    尝试用TryParse 函数代替Parse

    【讨论】:

    • TryParse 需要一个浮点字段才能输出到
    • @Immersive 谢谢。对此感到抱歉。
    • 一旦 2018.3 发布,由于 C# 在内部更新到 7.0,我们将能够使用内联 out 声明。
    • 我还在c#4.0哈哈哈
    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多