Maison >base de données >tutoriel mysql >Pourquoi une division entière donne-t-elle zéro au lieu d'une valeur décimale ?

Pourquoi une division entière donne-t-elle zéro au lieu d'une valeur décimale ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-20 17:31:12329parcourir

Why Does Integer Division Yield Zero Instead of a Decimal Value?

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 :

  1. 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.

  2. 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!

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