Re: [SQL] fields with float[48] type question - Mailing list pgsql-sql

From Sergey S. Rakitin
Subject Re: [SQL] fields with float[48] type question
Date
Msg-id 375FAE87.2B09292@visti.net
Whole thread Raw
In response to Re: [SQL] fields with float[48] type question  (Stuart Rison <stuart@ludwig.ucl.ac.uk>)
List pgsql-sql
Stuart Rison wrote:
    Hi Stuart,

Thanks a lot.

Well, how I told before one of my PgSQL versions is 6.5 with type
'numeric' of data.
I'm trying to play with it right now. It seems to be very usefull for
me! I'm getting true value in my example above.
But if increment is [*].0000001225357 then scale truncated to 6 digits
(even if the field created with scale > 6)... :(
My question is how to get work right with numeric operators for
'numeric' and float types? There's such functions as float8_numeric()
(returns numeric), but I can't get 7th digit of scale anyway.


> I can't explain the behaviour -although I've had similar "trouble" with
> AGGREGATES on floats.
> 
> I potential work-around that could to work with your example though is:
> 
> CREATE SEQUENCE test_seq INCREMENT -6 START 10000 MAXVALUE 10000 MINVALUE 0;
> 
> CREATE FUNCTION get_nextval() RETURNS float AS
> 'SELECT nextval(\'test_seq\')/100.0' LANGUAGE 'sql';
> 
> then...
> 
> SELECT get_nextval(); [first time]
> 
> NOTICE:  test_seq.nextval: sequence was re-created
> get_nextval
> -----------
>         100
> (1 row)
> 
> SELECT get_nextval(); [22nd time]
> 
> get_nextval
> -----------
>       98.68
> (1 row)
> 
> problem is you have to multiply your starting value and the increment by
> whatever it takes to 'get rid' of decimal places.  That fine if your
> increment is 0.06 but if it's 0.0000001225357 it becomes rather more silly!
> 
> anyway HTH,
> 
> regards,
> 
> Stuart
> 
> >       I have two pc's with PostgreSQL 6.4.2r and 6.5beta2
> >       and some troubles with both of them.
> >
> >       Well, here's an example:
> >       I create some simple table with float field (called field_one), insert
> >       value 100 in it. Then I need to increase/decrease it number by 0.06 on
> >every step
> >       many times (from trigger/SPI or simple shell script contains just _21_
> >(or less)
> >       lines like this: 'update <class_name> set field_one = field_one [-+]
> >0.06')...
> >       Here'we go. If I put _22+_ lines I got very interesting results. For
> >example:
> >       100 - 22 times by 0.06 == 98.6799999999999 instead of 98.68... And it's
> >not
> >       the end of story...
> >
> >
> >               Can someone explain me such behaviour?..


--Sergey S. Rakitin        ElVistiSSR2-RIPE          Information Center


pgsql-sql by date:

Previous
From: "Emils Klotins"
Date:
Subject: Re: [SQL] DataStyle
Next
From: José Soares
Date:
Subject: Re: [SQL] DataStyle