Résultat zéro inattendu de la division entière
Lors d'un récent projet de programmation, le code suivant a produit un résultat inattendu :
<code>PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2; PRINT @weight</code>
La division a donné 0 au lieu des 0,073667712 attendus.
La cause profonde : les types de données entiers
Le problème vient des types de données @set1
et @set2
. Les deux sont des nombres entiers, capables de stocker uniquement des nombres entiers. La division entière tronque toujours la partie décimale, ce qui donne un résultat entier. Par conséquent, 47 divisé par 638 donne 0.
Solutions
Pour obtenir le résultat décimal correct, deux approches s'offrent à vous :
Définir les variables sous forme de flottants : Déclarez @set1
et @set2
sous forme de nombres à virgule flottante (flotteurs). Cela permet aux variables de contenir des valeurs décimales, garantissant une division décimale précise.
Casting de type pendant le calcul : Si la modification des types de données variables n'est pas possible, utilisez l'opérateur CAST
pour convertir temporairement les entiers en flottants pendant la division :
<code>SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);</code>
L'une ou l'autre méthode garantit que l'opération de division renvoie la valeur décimale attendue, résolvant ainsi le problème du résultat zéro inattendu.
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!