Re: [GENERAL] dividing integers not producing decimal fractions

2006-11-05 Thread Martijn van Oosterhout
On Fri, Nov 03, 2006 at 02:03:59PM -0800, [EMAIL PROTECTED] wrote:
 You're right (I dug around in the documentation and edjoocated myself).
 However:

snip

 sales=# select 1/2::float;
  ?column?
 --
   0.5
 (1 row)

Note that in this case the float cast only applies to the last
number. That's why you get this:

 sales=# select (1/2)*4::float;
  ?column?
 --
 0
 (1 row)

The integer divide happens first. It is best to apply the cast to the
first element of the expression, as expressions are parsed
left-to-right, so:

select (1::float/2)::4;

Works better. However, mostly it's better to explicitly make all your
constants non-integer if that's what you mean. This statement:

select (1.0/2.0)*4.0;

Gives the same result, but doesn't need any casts.

Have a nice day,
-- 
Martijn van Oosterhout   kleptog@svana.org   http://svana.org/kleptog/
 From each according to his ability. To each according to his ability to 
 litigate.


signature.asc
Description: Digital signature


Re: [GENERAL] dividing integers not producing decimal fractions

2006-11-04 Thread rloefgren
Alexander Staubo wrote:
 On Nov 2, 2006, at 23:54 , [EMAIL PROTECTED] wrote:

  I'm trying to produce a decimal fraction by dividing integer fields
  like this fragment of the query:
 
  ...((cntoh0.count + cntoh1.count)/ttl_deptcat.ttlcount) as Ratio...
 ...
  How do I get fractions when dividing integers? Cast as something?

 Exactly. Just as in most computer languages, incidentally:

 # select 1 / 2 as x;
 x
 ---
 0
 (1 row)

 # select 1 / 2::float as x;
x
 -
 0.5
 (1 row)

 Alexander.

 ---(end of broadcast)---
 TIP 3: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

You're right (I dug around in the documentation and edjoocated myself).
However:

sales=# select 1/2;
 ?column?
--
0
(1 row)

and:

sales=# select 1/2::float;
 ?column?
--
  0.5
(1 row)

but:

sales=# select 1/2*4::float;
 ?column?
--
0
(1 row)

or:

sales=# select (1/2)*4::float;
 ?column?
--
0
(1 row)

or try:

sales=# select (1/2)* 4::numeric(6,3);
 ?column?
--
0.000
(1 row)

I'll just avoid this next time by not throwing integer around so
quickly. (At least until I become something of a postgres obi-wan...)

thanks,

r


---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
   subscribe-nomail command to [EMAIL PROTECTED] so that your
   message can get through to the mailing list cleanly


Re: [GENERAL] dividing integers not producing decimal fractions

2006-11-03 Thread Alexander Staubo

On Nov 2, 2006, at 23:54 , [EMAIL PROTECTED] wrote:


I'm trying to produce a decimal fraction by dividing integer fields
like this fragment of the query:

...((cntoh0.count + cntoh1.count)/ttl_deptcat.ttlcount) as Ratio...

...

How do I get fractions when dividing integers? Cast as something?


Exactly. Just as in most computer languages, incidentally:

# select 1 / 2 as x;
x
---
0
(1 row)

# select 1 / 2::float as x;
  x
-
0.5
(1 row)

Alexander.

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

  http://www.postgresql.org/docs/faq