Maison >base de données >tutoriel mysql >Comment puis-je calculer correctement le résultat d'une division entière dans PostgreSQL pour éviter la troncature ?

Comment puis-je calculer correctement le résultat d'une division entière dans PostgreSQL pour éviter la troncature ?

DDD
DDDoriginal
2024-12-17 10:39:24194parcourir

How Can I Correctly Calculate the Result of Integer Division in PostgreSQL to Avoid Truncation?

Division ( / ) Erreur de calcul dans PostgreSQL

Vous rencontrez un problème de division dans PostgreSQL où une division entière entraîne une réponse inexacte. Plongeons dans le contexte et proposons une solution qui résout le problème.

Comprendre la division entière

La division entière, notée "/", tronque le quotient vers zéro. Cela signifie que lors de la division de deux entiers, le résultat est arrondi au nombre entier le plus proche.

Dans l'exemple donné, "dev_cost" et "sell_cost" sont tous deux des entiers. Par conséquent, la requête "select dev_cost / sell_cost" renvoie 2, qui est l'équivalent entier de 16 000 divisé par 7 500. Cependant, vous avez besoin de la quantité de logiciels pour récupérer le dev_cost, qui est 3.

Résoudre le problème de calcul

Pour obtenir la valeur précise, nous devons nous assurer qu'au moins un opérande dans la division est une valeur à virgule flottante ou décimale. Cela évite la troncature et donne un quotient fractionnaire.

Une solution consiste à convertir l'une des colonnes en décimal à l'aide de l'opérateur "CAST":

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

Une autre alternative consiste à utiliser l'opérateur "CAST". Syntaxe "::decimal" pour convertir la colonne dev_cost :

select dev_cost::decimal / sell_cost from software ;

Ces deux approches renverront une virgule flottante résultat, représentant la quantité exacte de logiciel nécessaire.

Arrondir à l'entier le plus proche

Si vous souhaitez arrondir le résultat à l'entier le plus proche, représentant la quantité minimale de logiciel pour récupérer le dev_cost, vous pouvez utiliser la fonction "CEIL" :

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

Cela arrondira le résultat décimal à l'unité supérieure nombre entier suivant, garantissant que suffisamment de logiciels sont vendus pour couvrir le coût de développement.

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