首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++整数浮点铸造

C++整数浮点铸造
EN

Stack Overflow用户
提问于 2011-03-28 17:09:09
回答 9查看 229.9K关注 0票数 39

为什么m总是= 0?someClass的x和y成员是整数。

代码语言:javascript
复制
float getSlope(someClass a, someClass b)
{           
    float m = (a.y - b.y) / (a.x - b.x);
    cout << " m = " << m << "\n";
    return m;
}
EN

回答 9

Stack Overflow用户

发布于 2011-03-28 17:14:20

您需要使用cast。我看到了其他答案,它们确实有效,但由于标签是C++,我建议您使用static_cast

代码语言:javascript
复制
float m = static_cast< float >( a.y - b.y ) / static_cast< float >( a.x - b.x );
票数 66
EN

Stack Overflow用户

发布于 2011-03-28 17:15:07

您应该知道,在计算包含整数的表达式时,每个计算阶段的临时结果也会四舍五入为整数。在赋值给float m时,该值仅在整数运算后转换为支持实数的float类型。这意味着,例如,3/4在变为0.0之前就已经是"0“值了。您需要强制转换为浮动,以使其更早发生。您可以通过在a.yb.ya.xb.xa.y - b.ya.x - b.x中的任何一个上使用语法float(value)来做到这一点:只要其中一个术语在除法之前是浮点数,那么什么时候完成都没有关系,例如

代码语言:javascript
复制
float m = float(a.y - b.y) / (a.x - b.x); 
float m = (float(a.y) - b.y) / (a.x - b.x); 
...etc...
票数 1
EN

Stack Overflow用户

发布于 2011-03-28 17:12:32

因为(a.y - b.y)可能小于(a.x - b.x),所以在您的代码中,转换是在除法运算之后完成的,所以结果是一个整数,所以是0。

应该在/操作之前强制转换为float

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5456801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档