C++ int float casting

el_*_*_le 26 c++ floating-point 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;
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*rov 56

你需要使用演员表.我看到了其他的答案,它们确实有用,但是因为标签是C++我建议你使用的static_cast:

float m = static_cast< float >( a.y - b.y ) / static_cast< float >( a.x - b.x );
Run Code Online (Sandbox Code Playgroud)

  • @notlesh - C是完全不同的语言.我不认为这是"可移植性问题",但我明白你的观点 (5认同)
  • 当OP要求C++时,这应该是正确的答案.http://www.stroustrup.com/bs_faq2.html#static-cast (4认同)

Bol*_*ock 43

发生整数除法,然后将结果(整数)指定为浮点数.如果结果小于1,则结果为0.

你需要在分割之前先将表达式转换为浮点数,例如

float m = (float)(a.y - b.y) / (float)(a.x - b.x);
Run Code Online (Sandbox Code Playgroud)

  • ..并注意零除! (6认同)
  • @GrahamS - 当我们谈论浮点数时,除以 0 并没有那么危险。您可以安全地将任何浮点数除以 0.0 或 -0.0,将得到“inf”。但是,是的,如果出现意外,就会引起问题。 (2认同)

小智 5

您可以通过乘以 (1.0) 来转换分子和分母。