[英]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”值。 您需要強制轉換為浮動更早發生。 您可以通過在ay
、 by
、 ax
、 bx
、 ay - by
或ax - 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.