Re: división

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Esneiker <eenriquez(at)cav(dot)desoft(dot)cu>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: división
Date: 2010-10-08 19:42:33
Message-ID: 1286566540-sup-9862@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Excerpts from Esneiker's message of vie oct 08 12:41:05 -0400 2010:
> Hola comunidad,
>
> Alguien podría decirme por qué si hago esto select round(2/5,2) devuelve
> 0.00 y no 0.40 ?

Si quieres que utilice un operador de división que no sea entera, haz un
cast a los argumentos. Por ej.

alvherre=# select round(2::numeric / 5, 2);
round
───────
0.40
(1 fila)

La división entera no arroja resultados con decimales. Por ej.

alvherre=# select 9 / 4;
?column?
──────────
2
(1 fila)

Lo que necesitas para complementar este resultado es una operación de remanente
(o “resto”)

alvherre=# select 9 % 4;
?column?
──────────
1
(1 fila)

(de aquí puedes deducir que 9/4 = 2 + 1/4)

La razón para hacerlo de esta forma es que no hay ninguna manera de
representar este resultado en forma totalmente correcta (precisa). Por
ej. considera 10/9. Si lo calculas como numeric, retorna
1.1111111111111111 que no es exactamente la respuesta correcta (la
respuesta correcta es 1.111111111111...). En cambio usando los
operadores enteros, puedes saber que la respuesta es 1 + 1/9, y no hay
ninguna imprecisión en el resultado.

--
Álvaro Herrera <alvherre(at)commandprompt(dot)com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

  • división at 2010-10-08 16:41:05 from Esneiker

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Sergio Valdes Hurtado 2010-10-08 20:06:45 Left join en subconsulta
Previous Message Alvaro Herrera 2010-10-08 19:27:56 Re: se puede realizar COMMIT en una función?