为什么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;
}
发布于 2011-03-28 17:14:20
您需要使用cast。我看到了其他答案,它们确实有效,但由于标签是C++
,我建议您使用static_cast
float m = static_cast< float >( a.y - b.y ) / static_cast< float >( a.x - b.x );
发布于 2011-03-28 17:15:07
您应该知道,在计算包含整数的表达式时,每个计算阶段的临时结果也会四舍五入为整数。在赋值给float m
时,该值仅在整数运算后转换为支持实数的float
类型。这意味着,例如,3/4在变为0.0之前就已经是"0“值了。您需要强制转换为浮动,以使其更早发生。您可以通过在a.y
、b.y
、a.x
、b.x
、a.y - b.y
或a.x - b.x
中的任何一个上使用语法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...
发布于 2011-03-28 17:12:32
因为(a.y - b.y)可能小于(a.x - b.x),所以在您的代码中,转换是在除法运算之后完成的,所以结果是一个整数,所以是0。
应该在/操作之前强制转换为float
https://stackoverflow.com/questions/5456801
复制相似问题