match float values

Is there any way to match float values?
From what I understand in searching around floats can be slightly off if they have many decimals.

But I only want to match a small number with 3 or 4 decimals.
In the code below my debug.log shows 0.1090088 while I want it to be 0.109
is this possible or should I convert my versioning to an int?

var cryptCurrentVersion :float;
var floatKey :float;

function set currentVersion (value : float) 
{ 
	cryptCurrentVersion = value + floatKey; 
}
function get currentVersion () : float
{
	return cryptCurrentVersion - floatKey; 
}


function Awake()
{
	floatKey 			= UnityEngine.Random.Range(95.5055, 995.5055);
	
	currentVersion 		= 0.109;
	
	Debug.Log(currentVersion);
	
	var latestVersion :float = 0.109;
	
	if(currentVersion != latestVersion)
	{
		// Update game
	}
}

3 Answers

3

You should use the Mathf.Approximately method to compare floats rather than directly comparing them.

Wel and sometimes the awnser hits you after you posted a question :slight_smile:
Adding this before the if statement seems to do the trick as now both values have the same caculation “error”. not sure if this is the best way to do this tough so I leave this question open for a bit loinger.

latestVersion += floatKey;
latestVersion -= floatKey;

There is a JavaScript function called “toFixed(numberOfDecimals)” that may help you. Dunno if it works on Unity, but give it a try:

var num : float = 5.5678;

var fNum : float = 0.0;

fNum = num.toFixed(3);

Then fNum will be 5.568, i think.

Here I found a nice function with tolerance control now I konow what to search for: http://answers.unity3d.com/questions/34888/float-comparison-is-not-working.html