objectif c les valeurs flottantes
Pourquoi nous ne pouvons pas stocker le résultat de la division de deux entiers dans la variable de type float ?
int a = 100;
int b =50;
float temp = b/a;
il donne t= 0 !
aussi je n'ai
int temp = b/a;
il donne t= 0 !
mais quand je n'ai
float temp = (float)b / (float)a;
il donne de bon résultat. Pourquoi donc ?
OriginalL'auteur Maulik | 2011-04-08
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle
float temp = b/a;
donne 0 alors quefloat temp = (float)b/a;
donne de 0,5, c'est que le compilateur détermine le type de sortie de l'opération de division basée sur les types des opérandes, pas la destination, le type de stockage. Disons-le simplement:Ainsi, lorsque vous vous
float temp = b/a;
vous êtes en train de faire en division d'entier deb
eta
, puis le stockage de l'entier résultant (0 dans l'exemple) dans une variable de typefloat
. En essence, le temps que la valeur est convertie à virgule flottante vous avez déjà perdu les informations que vous recherchez (en supposant que vous vouliez faire un floating-point de fracture), et la conversion ne va pas le ramener.Afin d'obtenir le résultat que vous voulez (encore une fois, en supposant que vous voulez faire a floating-point de fracture), vous avez besoin de jeter au moins un des opérandes à
float
avant vous diviser.OriginalL'auteur aroth
ya... 😀 ......
OriginalL'auteur Rakesh Bhatt
Sa division entière - 50/100 est 0, le reste (vous pouvez utiliser le module) est de 50.
Vous aurez besoin d'utiliser des flotteurs, si vous lancez à partir de int ou commencer avec eux est à vous.
OriginalL'auteur Josh
La déclaration ci-dessous, vous lancez vos valeurs entières en float avant de lancer l'opération
Pourrait donc être vu comme ci-dessous
puis
Et le résultat
OriginalL'auteur Jhaliya
Dans votre cas 50/100 est de 0,2. En obtenant le résultat de deux nombres entiers, le résultat sera aussi en forme entière de sorte qu'il tronque la partie décimale de vous donner 0 seul. Mais dans le cas de flotteur, il est considéré comme un flottant de la division de sorte que vous obtiendrez de 0,2
Parce qu'En Objective-C '/' effectue une division entière sur les arguments entiers, 4/5 est arrondi à 0, 3/2 est arrondi à 1, et ainsi de suite. Vous voulez probablement pour lancer certains de vos nombres à virgule flottante formes avant d'effectuer la division.
OriginalL'auteur visakh7