/ / C ++ Int Float Casting - C ++, Casting, Fließkommazahl

C ++ Int Float Casting - C ++, Casting, Gleitkomma

Warum ist m immer = 0? Die x- und y-Glieder von someClass sind ganze Zahlen.

float getSlope(someClass a, someClass b)
{
float m = (a.y - b.y) / (a.x - b.x);
cout << " m = " << m << "n";
return m;
}

Antworten:

39 für die Antwort № 1

Ganzzahlige Division tritt auf, dann das Ergebnis was ist eine ganze Zahl, wird als Float zugewiesen. Wenn das Ergebnis weniger als 1 ist, endet es mit 0.

Sie möchten die Ausdrücke zuerst in Floats umwandeln, bevor Sie sie teilen, z.

float m = (float)(a.y - b.y) / (float)(a.x - b.x);

45 für die Antwort № 2

Sie müssen Gips verwenden. Ich sehe die anderen Antworten und sie werden wirklich funktionieren, aber so wie der Tag ist C++ Ich schlage vor, Sie zu benutzen static_cast:

float m = static_cast< float >( a.y - b.y ) / static_cast< float >( a.x - b.x );

1 für die Antwort № 3

Beachten Sie, dass bei der Auswertung eines Ausdrucks, der ganze Zahlen enthält, die temporären Ergebnisse jeder Bewertungsstufe auch auf ganze Zahlen gerundet werden. In deiner Aufgabe zu float mwird der Wert nur in die reelle Zahl konvertiert float Geben Sie nach der Ganzzahl-Arithmetik ein. Dies bedeutet, dass beispielsweise 3/4 bereits einen Wert "0" haben würde, bevor er 0,0 wird. Sie müssen die Konvertierung erzwingen, damit sie früher ausgeführt wird. Sie können dies mithilfe der Syntax tun float(value) auf einem von a.y, b.y, a.x, b.x, a.y - b.y, oder a.x - b.x: Es spielt keine Rolle, wann es gemacht wird, solange einer der Begriffe ein Float ist, bevor die Division stattfindet, z.

float m = float(a.y - b.y) / (a.x - b.x);
float m = (float(a.y) - b.y) / (a.x - b.x);
...etc...

0 für die Antwort № 4

Er führt eine Ganzzahldivision aus, was 3/4 = 0 bedeutet. Eine der Klammern wird zum Fließen gebracht

 (float)(a.y - b.y) / (a.x - b.x);

0 für die Antwort № 5

wenn (a.y - b.y) kleiner als (a.x - b.x) ist, m ist immer Null.

so wirf es so aus.

float m = ((float)(a.y - b.y)) / ((float)(a.x - b.x));

0 für die Antwort № 6

Da (a.y - b.y) wahrscheinlich kleiner ist als (a.x - b.x) und in Ihrem Code das Casting nach der Divisionsoperation ausgeführt wird, ist das Ergebnis also eine ganze Zahl, also 0.

Sie sollten vor der / -Operation in Float gehen


0 für die Antwort № 7

Sie führen Berechnungen für Ganzzahlen durch und weisen ihr Ergebnis dem Float-Wert zu. Der Compiler konvertiert also implizit Ihr Integer-Ergebnis in Float