paulohr
paulohr

Reputation: 586

Delphi - Comparing float values

I have a function that returns a float value like this:

1.31584870815277

I need a function that returns TRUE comparing the value and the two numbers after the dot.

Example:

if 1.31584870815277 = 1.31 then ShowMessage('same');

Sorry for my english.

Can someone help me? Thanks

Upvotes: 0

Views: 3603

Answers (2)

Greg Heffernan
Greg Heffernan

Reputation: 31

If speed isn't the highest priority, you can use string conversion:

    if Copy(1.31584870815277.ToString, 1, 4) = '1.31' then ShowMessage('same');

Upvotes: 0

David Heffernan
David Heffernan

Reputation: 613612

Your problem specification is a little vague. For instance, you state that you want to compare the values after the decimal point. In which case that would imply that you wish 1.31 to be considered equal to 2.31.

On top of this, you will need to specify how many decimal places to consider. A number like 1.31 is not representable exactly in binary floating point. Depending on the type you use, the closest representable value could be less than or greater than 1.31.

My guess is that what you wish to do is to use round to nearest, to a specific number of decimal places. You can use the SameValue function from the Math unit for this purpose. In your case you would write:

SameValue(x, y, 0.01)

to test for equality up to a tolerance of 0.01.

This may not be precisely what you are looking for, but then it's clear from your question that you don't yet know exactly what you are looking for. If your needs are specifically related to decimal representation of the values then consider using a decimal type rather than a binary type. In Delphi that would be Currency.

Upvotes: 11

Related Questions