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!