簡體   English   中英

C++ int 浮點數轉換

[英]C++ int float casting

為什么 m 總是 = 0? someClass 的 x 和 y 成員是整數。

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

您需要使用演員表。 我看到了其他答案,它們確實有效,但由於標簽是C++我建議您使用static_cast

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

發生整數除法,然后將結果作為整數分配為浮點數。 如果結果小於 1,則結果為 0。

在划分之前,您需要先將表達式轉換為浮點數,例如

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

您應該知道,在計算包含整數的表達式時,每個計算階段的臨時結果也會四舍五入為整數。 在您對float m的賦值中,該值僅在整數運算之后轉換為具有實數能力的float類型。 這意味着,例如,3 / 4 在變為 0.0 之前已經是“0”值。 您需要強制轉換為浮動更早發生。 您可以通過在aybyaxbxay - byax - bx任何一個上使用語法float(value)來做到這一點:只要其中一個術語是浮點數,什么時候完成並不重要在分裂發生之前,例如

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

因為 (ay - by) 可能小於 (ax - bx) 並且在您的代碼中,轉換是在除法運算之后完成的,因此結果是一個整數,因此為 0。

您應該在 / 操作之前強制轉換為浮動

您正在對整數執行計算並將其結果分配給浮點數。 所以編譯器隱式地將您的整數結果轉換為浮點數

進行整數除法時,結果將始終為整數,除非一個或多個操作數是浮點數。 只需將一個/兩個操作數類型轉換為浮點數,編譯器就會進行轉換。 當您希望算術按預期執行時使用類型轉換,以便結果將是正確的數據類型。

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

您可以通過乘以 (1.0) 來轉換分子和分母。

您可以使用 ios 操縱器 fixed()。 它將允許您打印浮點值。

他做了一個整數除法,這意味着 3 / 4 = 0。將其中一個括號轉換為浮動

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

如果 (ay - by) 小於 (ax - bx),則m始終為零。

所以就這樣投吧。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM