[英]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.