c# - 错误:输入字符串的格式不正确
问题描述
检查文本中的数字 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.9999999999
或者3.000000001
在这种情况下,比较3
可能会意外失败。
Mathf.Approximately
而是使用基本上等于使用的 Unity 内置
if(Math.Abs(a-b) <= 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
。
推荐阅读
- flutter - 使套接字类可用于整个应用程序
- php - WooCommerce 中特定产品类别的最低购物车数量
- c - 如何将函数中使用的变量传递给 C 中另一个函数中的变量?
- java - 为什么在 Java 中使用 RestTemplate 时客户端异常中缺少我的错误消息正文?
- c++ - 当代码在共享库中时,静态变量是否会重新初始化?
- reactjs - 带有 Socket io 的 Redux 中间件
- ios - 尝试从 json 数据加载图像 url 时索引超出范围
- groovy - methodMissing 的 Groovy 缓存不起作用
- node.js - npx create-react-app 返回“超出最大调用堆栈大小”
- latex - 如何在 p5.js 中显示漂亮的数学方程式?