Pourquoi m est toujours = 0? Les membres x et y de someClass sont des entiers.
float getSlope(someClass a, someClass b)
{
float m = (a.y - b.y) / (a.x - b.x);
cout << " m = " << m << "\n";
return m;
}
La division entière se produit, puis le résultat, qui est un entier, est affecté comme un flottant. Si le résultat est inférieur à 1, il se termine par 0.
Vous voudrez convertir les expressions en flottants avant de les diviser, par exemple.
float m = (float)(a.y - b.y) / (float)(a.x - b.x);
Vous devez utiliser la fonte. Je vois les autres réponses, et elles fonctionneront vraiment, mais comme la balise est C++
Je vous suggère d'utiliser static_cast
:
float m = static_cast< float >( a.y - b.y ) / static_cast< float >( a.x - b.x );
Vous devez savoir que lors de l'évaluation d'une expression contenant des nombres entiers, les résultats temporaires de chaque étape de l'évaluation sont également arrondis pour être des nombres entiers. Dans votre affectation à float m
, La valeur n'est convertie en type float
capable de nombre réel qu'après l'arithmétique entière. Cela signifie que, par exemple, 3/4 serait déjà une valeur "0" avant de devenir 0,0. Vous devez forcer la conversion à flotter pour qu'elle se produise plus tôt. Pour ce faire, utilisez la syntaxe float(value)
sur l'un des a.y
, b.y
, a.x
, b.x
, a.y - b.y
, ou a.x - b.x
: peu importe quand c'est fait tant qu'un des termes est un flottant avant que la division ne se produise, par exemple.
float m = float(a.y - b.y) / (a.x - b.x);
float m = (float(a.y) - b.y) / (a.x - b.x);
...etc...
il fait une division entière, ce qui signifie 3/4 = 0. lancer une des parenthèses pour flotter
(float)(a.y - b.y) / (a.x - b.x);
Vous effectuez des calculs sur des entiers et affectez son résultat à float. Donc, le compilateur convertit implicitement votre résultat entier en float
si (a.y - b.y) est inférieur à (a.x - b.x), m
est toujours nul.
alors jetez-le comme ça.
float m = ((float)(a.y - b.y)) / ((float)(a.x - b.x));
Parce que (a.y - b.y) est probablement inférieur à (a.x - b.x) et dans votre code, le transtypage est effectué après l'opération de division, le résultat est donc un entier donc 0.
Vous devez lancer pour flotter avant l'opération /