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
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? |