2016-11-03 1 views
0

J'utilise psql (9.1.3). J'ai une table (par exemple) unLa requête postgres ne correspond pas aux valeurs de double précision négative

A a deux colonnes:

a_id: Entier

customer_pay: double précision

Je ces valeurs dans le table.

a_id  | customer_pay |  

-------------------- + -------------- +

1733684 |  -264.6 | 
    1723382 |  -314.84 | 
    1728106 |  50.55 | 
    1741636 |  -264.6 | (4 rows) 

mais quand je l'ai fait

select a_id de A où customer_pay = -264,6;

J'ai obtenu rien.

J'ai essayé toutes les variantes de précision possibles comme -264.60, -264.00, etc. Cette requête fonctionne avec précision pour +264.6. Que dois-je faire pour sélectionner des valeurs avec un type de double précision négatif.

Merci pour l'aide.

+0

J'ai couru cela dans Oracle, semble bien. – sagi

+0

J'ai essayé de mettre "", "", etc. Rien ne fonctionne pour moi dans postgres. – Amal

+0

Si vous utilisez 'WHERE ROUND (customer_pay) = -264'. Est-ce que ça marche ? – sagi

Répondre

0
select a_id 
from a 
where round(customer_pay::numeric, 2) = -264.6 

From the manual:

calculs avec des valeurs numériques donnent des résultats exacts lorsque cela est possible, par exemple addition, soustraction, multiplication. Cependant, les calculs sur les valeurs numériques sont très lents par rapport aux types entiers ou aux types à virgule flottante décrits dans la section suivante.

0

Le type de données DOUBLE PRECISION est un type de données approximatif et inexact. Je ne vois aucune raison, quelqu'un l'utiliserait à la place d'un type exact tel que DECIMAL. Avec les types de données approximatifs, peu importe la langue, vous devez jamais utiliser =. Lorsque vous comparez une valeur de données inexacte, tenez toujours compte de certains delta, par ex. where customer_pay between -264.6000001 and 264.5999999. Cela seul devrait expliquer pourquoi je ne les utilise jamais ;-)

+0

L'avantage du flottement sur numeric est que les opérations sur lui sont plus rapides. –

+0

@Clodoaldo Neto: Sont-ils? Pouvez-vous même mesurer une différence en travaillant avec l'un ou l'autre dans PostgreSQL? S'il y a une différence, elle devrait être négligeable. –

+0

Vérifier ma mise à jour –