Classic behaviour, which has nothing to do with postgres. Try the program below to see the same effect. You probably should be using a rounding function to see what you seem to expect.
cheers andrew #include <stdio.h> main() { double x[] = { 0.1, 0.11, 0.12, 0.13, 0.14, 0.15 }; int i,n; for (i=0 ; i < 6; i++) { n = x[i] * 100; printf("%d\n",n); } } Cristian Prieto wrote:
Hello, I'm using PostgreSQL 8.0.4 in Fedora Core 3, right now I'm learning a little about the postgresql internals and the way some kind of SPs could be written in c language; I found something really weird and I cannot explain to me this behavior: #include "postgres.h" #include "fmgr.h" PG_FUNCTION_INFO_V1(test); Datum repeat_item(PG_FUNCTION_ARGS) { int num_times; num_times = PG_GETARG_FLOAT8(0) * 100; PG_RETURN_INT32(num_times); } Inside psql this happens: # Create or replace function test(float) returns integer as 'test.so' language 'c' stable; select test(0.1); Returns 10 Select test(0.11); Returns 11 Select test(0.12) Returns 11 Select test(0.13) Returns 13 Select test(0.14) Returns 14 Select test(0.15) Returns 14 What Is happening here? ---------------------------(end of broadcast)--------------------------- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match
---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org