Page 1 of 1

Mysterious counting of the INT() function

Posted: Tue Apr 10, 2018 1:14 pm
by edk
To all.
Do you also get the number 5 instead of the expected 6 as a result of

Code: Select all

msgdebug( INT( ( 129.6 - 129 ) * 10 ) )
:?: :!: :shock:

Edward.

Re: Mysterious counting of the INT() function

Posted: Tue Apr 10, 2018 1:31 pm
by apais
floating point issues !

Re: Mysterious counting of the INT() function

Posted: Tue Apr 10, 2018 2:04 pm
by serge_girard
Yes, me too...

Serge

Re: Mysterious counting of the INT() function

Posted: Mon Apr 16, 2018 7:16 pm
by SALINETAS24
msgdebug( INT( VAL(STR(( 129.6 - 129 ) * 10 ) )))

Raro, raro .., raro

Re: Mysterious counting of the INT() function

Posted: Tue Apr 17, 2018 10:00 am
by Anand
We are using str() with default values of decimal points and again val() to convert it, so problem can come up at random times. I am not sure when and why, but have faced such situation in Clipper and Xbase++ many times.

If it can be avoided then use int((129.6-129)*10), else use round(x,n) to keep the decimals at known places.

Regards,

Anand

Re: Mysterious counting of the INT() function

Posted: Tue Apr 17, 2018 1:09 pm
by edk
As Angel points out
apais wrote: Tue Apr 10, 2018 1:31 pm floating point issues !
this is a problem with the binary format of floating point numbers: https://harbour.github.io/the-oasis/clipper-5.html

Using integers in the calculations performed, solves the problem.

Code: Select all

msgdebug( INT( ( 129.6 - 129 ) * 10 ) )   vs.   msgdebug( INT(  129.6*10 - 129*10 ) )