Re: Simple math statement - problem - Mailing list pgsql-general

From Lew
Subject Re: Simple math statement - problem
Date
Msg-id ssOdnVTR0t0Gj8zanZ2dnUVZ_rqlnZ2d@comcast.com
Whole thread Raw
In response to Simple math statement - problem  ("Postgres User" <postgres.developer@gmail.com>)
List pgsql-general
Lew wrote:
> Postgres User wrote:
>> The problem turned out to be related to my function..
>>
>> Given this table:
>>
>> CREATE TABLE "table2" (
>>   "s_val" numeric(6,2),
>>   "e_val" numeric(6,2)
>> ) WITH OIDS;
>>
>> The following functions of code will set retval = NULL;
>>
>> declare
>>    retval numeric(6,2);
>>    rec record;
>> begin
>>    SELECT * INTO rec FROM table2 LIMIT 0;
>>    rec.s_val = 100;
>>    rec.e_val = 101;
>>    retval = (rec.s_val - rec.e_val) / rec.s_val;
>>
>>    return retval;
>> end
>>
>> However, if I explicitly typecast, then it returns the proper value:
>> retval = (rec.s_val::numeric(6,2) - rec.e_val::numeric(6,2)) /
>> rec.s_val::numeric(6,2);
>
> Sure, because the first way you're doing integer division, and the
> second way you're doing floating point division.  In integer division,
> -1/100 yields zero.

The more I look at this, the more I think I'm wrong.

I'm researching the semantics of the idioms that you used.  I don't know what
type rec.s_val and rec.e_val end up being after the integer assignments.

--
Lew

pgsql-general by date:

Previous
From: "Andrus"
Date:
Subject: Re: log_line_prefix='%t %u %d %h %p %i %l %x ' causes error
Next
From: "oruc çimen"
Date:
Subject: postgresql in ramdisk