Checking for number 3 in Text
error:
The input string was not in the correct format
public Text Timer;
private void FixedUpdate()
{
if (Convert.ToDouble(Timer.text) == 3)
{
Debug.Log("w");
}
}
Checking for number 3 in Text
error:
The input string was not in the correct format
public Text Timer;
private void FixedUpdate()
{
if (Convert.ToDouble(Timer.text) == 3)
{
Debug.Log("w");
}
}
we don't know which string content your Time.text
has but you should rather use either double.TryParse
or since everything in the Unity API uses float
anyway maybe rather float.TryParse
. Alternatively you can also cast it to (float)
since you are wanting to compare it basically to an int
value anyway the precision doesn't really matter.
Because a second point is: You should never directly compare floating point type numbers via ==
(See How should I do floating point comparison?). It is possible that a float
(or double) value logically should have the value 3
like e.g. (3f + 3f + 3f) / 3f
but due to the floating point imprecision results in a value like 2.9999999999
or 3.000000001
in which case a comparing to 3
might fail unexpectedly.
Rather use the Unity built-in Mathf.Approximately
which basically equals using
if(Math.Abs(a-b) <= epsilon)
where Mathf.Epsilon
The smallest value that a float can have different from zero.
So I would recommend to rather do something like
if (double.TryParse(Timer.text, out var time) && Mathf.Approximately((float)time, 3))
{
Debug.Log("w");
}
Note however that if this is a timer that is continuously increased you might never exactly hit the value 3
so you might want to either use a certain threshold range around it like
if (double.TryParse(Timer.text, out var time) && time - 3 >= someThreshold)
{
Debug.Log("w");
}
or simply use e.g.
if (double.TryParse(Timer.text, out var time) && time >= 3)
{
Debug.Log("w");
}
if you only want any value bigger or equal to 3
.