C++ int float-casting

Waarom is m altijd = 0? De x- en y-leden van someClass zijn gehele getallen.

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

Antwoord 1, autoriteit 100%

Gehele deling vindt plaats, dan wordt het resultaat, een geheel getal, toegewezen als een float. Als het resultaat kleiner is dan 1 dan eindigt het als 0.

U wilt de expressies eerst naar floats casten voordat u ze deelt, bijvoorbeeld

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

Antwoord 2, autoriteit 92%

Je moet cast gebruiken. Ik zie de andere antwoorden, en ze zullen echt werken, maar aangezien de tag C++is, raad ik je aan om static_cast:

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

Antwoord 3, autoriteit 2%

Houd er rekening mee dat bij het evalueren van een uitdrukking die gehele getallen bevat, de tijdelijke resultaten van elke evaluatiefase ook worden afgerond op gehele getallen. In uw toewijzing aan float mwordt de waarde alleen geconverteerd naar het voor reële getallen geschikte float-type na de gehele rekenkunde. Dit betekent dat bijvoorbeeld 3/4 al een “0”-waarde zou zijn voordat het 0,0 wordt. U moet de conversie forceren om eerder te drijven. U kunt dit doen door de syntaxis float(value)te gebruiken op een van a.y, b.y, a.x, b.x, a.y - b.yof a.x - b.x: het maakt niet uit wanneer het klaar is, zolang een van de termen een float is ervoor de verdeling gebeurt, bijv.

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

Antwoord 4

Omdat (a.y – b.y) waarschijnlijk kleiner is dan (a.x – b.x) en in je code wordt het casten gedaan na de deelbewerking, dus het resultaat is een geheel getal, dus 0.

Je moet casten om te zweven vóór de /-bewerking


Antwoord 5

U voert berekeningen uit op gehele getallen en wijst het resultaat toe aan float. Dus de compiler converteert impliciet je integer resultaat naar float


Antwoord 6

Bij het delen van gehele getallen is het resultaat altijd een geheel getal, tenzij een of meer van de operanden een float zijn. Typ gewoon cast een/beide operanden naar een float en de compiler zal de conversie uitvoeren. Typecasting wordt gebruikt wanneer u wilt dat de rekenkunde werkt zoals het hoort, zodat het resultaat het juiste gegevenstype is.

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

Antwoord 7

je kunt zowel de teller als de noemer casten door te vermenigvuldigen met (1.0) .


Antwoord 8

hij deelt een geheel getal, wat 3 / 4 = 0 betekent. werp een van de haakjes om te zweven

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

Antwoord 9

als (a.y – b.y) kleiner is dan (a.x – b.x), is maltijd nul.

dus cast het zo.

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

Other episodes