Try this:
#include <stdio.h>
main()
{
double f1 = 123.45;
double f2 = 123.00;
double r;
r = f1 - f2; printf("%0.15f %0.15f %0.15f\n", f1, f2, r);
}
Internal representation of 123.45 is not exact. In the conversion to
binary, an irrational number is created which is truncated to 64 bits.
Bruce Momjian wrote:
> > Hi all,
> >
> > I tried to divide 123.45 by 123.00 but PostgreSQL gives me a wrong
> > result:
> >
> > hygea=> select 123.45 - 123.00;
> > ?column?
> > -----------------
> > 0.450000000000003
> > (1 row)
> >
>
> Wow, I get the same thing here.
>
> Even this doesn't work:
>
> test=> select float8(123.45) - float8(123.00);
> ?column?
> -----------------
> 0.450000000000003
> (1 row)
>
> Now constants are automatically promoted to float8, so I expected the
> same results, but what is going on here?
>
> --
> Bruce Momjian | http://www.op.net/~candle
> maillist@candle.pha.pa.us | (610) 853-3000
> + If your life is a hard drive, | 830 Blythe Avenue
> + Christ can be your backup. | Drexel Hill, Pennsylvania 19026