繁体   English   中英

错误:输入字符串的格式不正确

[英]error: The input string was not in the correct format

检查文本中的数字 3

错误:

输入字符串的格式不正确

public Text Timer;
   
    private void FixedUpdate()
    {
        if (Convert.ToDouble(Timer.text) == 3)
        {
            Debug.Log("w");
        }
    }

我们不知道您的Time.text具有哪个字符串内容,但您应该使用double.TryParse或者因为 Unity API 中的所有内容都使用float ,也许宁可使用float.TryParse 或者,您也可以将其转换为(float) ,因为您基本上想将其与int值进行比较,无论如何精度并不重要。

因为第二点是:您永远不应该通过==直接比较浮点类型数(请参阅我应该如何进行浮点比较? )。 一个float (或双精度)值可能在逻辑上应该具有值3 ,例如(3f + 3f + 3f) / 3f但由于浮点不精确导致值如2.99999999993.000000001在这种情况下与3进行比较可能会意外失败。

而是使用 Unity 内置的Mathf.Approximately基本上等于使用

if(Math.Abs(a-b) <= epsilon)

其中Mathf.Epsilon

浮点数可以不同于零的最小值。

所以我建议宁愿做类似的事情

if (double.TryParse(Timer.text, out var time) && Mathf.Approximately((float)time, 3))
{
    Debug.Log("w");
}

但是请注意,如果这是一个不断增加的计时器,您可能永远不会准确地达到值3 ,因此您可能希望使用它周围的某个阈值范围,例如

if (double.TryParse(Timer.text, out var time) && time - 3 >= someThreshold)
{
    Debug.Log("w");
}

或简单地使用例如

if (double.TryParse(Timer.text, out var time) && time >= 3)
{
    Debug.Log("w");
}

如果您只想要任何大于或等于3的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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