繁体   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