Sameer Hussain - 10 months ago 47

C# Question

I have 6 InputFields in my scene. Their content type is decimal.

I fetch values from these input fields and check if their sum is equal to 100.02. I enter 16.67 in all of them.

`float fireP = float.Parse(firePercentage.text);`

float waterP = float.Parse(waterPercentage.text);

float lightP = float.Parse(lightPercentage.text);

float nightP = float.Parse(nightPercentage.text);

float natureP = float.Parse(naturePercentage.text);

float healthP = float.Parse(healthPercentage.text);

float total = fireP + waterP + lightP + nightP + natureP + healthP;

if (total == 100.02f)

{

Debug.Log("It's equal");

}

else

{

Debug.Log(" Not equal. Your sum is = " + total);

}

I am getting " Not equal. Your sum is = 100.02" in my console log.

Anyways has any idea why this might be happening ?

Answer Source

The nearest `float`

to `16.67`

is `16.6700000762939453125`

.

The nearest `float`

to `10.02`

is `100.01999664306640625`

Adding the former to itself 5 times is not *exactly* equal to the latter, so they will not compare equal.

In this *particular* case, comparing with a *tolerance* in the order of 1e-6 is probably the way to go.