Re: somebody could explain this?
От | Andrew Dunstan |
---|---|
Тема | Re: somebody could explain this? |
Дата | |
Msg-id | 436B902B.3020905@dunslane.net обсуждение исходный текст |
Ответ на | somebody could explain this? ("Cristian Prieto" <cristian@clickdiario.com>) |
Список | pgsql-hackers |
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 > > >
В списке pgsql-hackers по дате отправления: