Maison >base de données >tutoriel mysql >Pourquoi la division entière PostgreSQL produit-elle des résultats inattendus et comment puis-je y remédier ?

Pourquoi la division entière PostgreSQL produit-elle des résultats inattendus et comment puis-je y remédier ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-19 15:39:10129parcourir

Why Does PostgreSQL Integer Division Produce Unexpected Results, and How Can I Fix It?

Inexactitude des opérations de division dans PostgreSQL

Lors de l'exécution d'opérations de division (/) dans PostgreSQL, il est crucial de noter que le résultat peut ne pas être comme prévu, en particulier lorsqu'il s'agit de types de données entiers. Dans ce cas, la division tronque le résultat vers zéro, ce qui peut conduire à des réponses incorrectes.

Pour illustrer la problématique, considérons un tableau nommé "software" avec deux colonnes entières : "dev_cost" et "sell_cost". Si "dev_cost" est 16 000 et "sell_cost" est 7 500, diviser "dev_cost" par "sell_cost" à l'aide de la requête suivante :

select dev_cost / sell_cost from software ;

renverra le résultat 2. Cependant, la bonne réponse est 3, indiquant qu'il faut vendre 3 unités de logiciels pour récupérer le coût de développement.

Pour résoudre ce problème, il faut pour garantir qu'au moins une des valeurs de l'opération de division est convertie en type de données flottant ou décimal. Cela permet des calculs précis en virgule flottante, en préservant la partie fractionnaire du résultat. Une façon d'y parvenir consiste à convertir la colonne "dev_cost" en type décimal dans la requête :

select cast(dev_cost as decimal) / sell_cost from software ;

Vous pouvez également simplifier l'opération de conversion à l'aide de l'opérateur de conversion de type PostgreSQL :

select dev_cost::decimal / sell_cost from software ;

Enfin, pour obtenir un résultat entier arrondi au nombre entier le plus proche, vous pouvez utiliser la fonction ceil() au sein du requête :

select ceil(dev_cost::decimal / sell_cost) from software ;

En suivant ces directives, vous pouvez surmonter les inexactitudes potentielles résultant de la division entière dans PostgreSQL et garantir des opérations mathématiques précises sur vos données numériques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn