首页 > 解决方案 > 错误:输入字符串的格式不正确

问题描述

检查文本中的数字 3

错误:

输入字符串的格式不正确

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

标签: c#unity3d

解决方案


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

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

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

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


推荐阅读