我有一些采用这种格式的 C++ 代码:
void calculate(int a, float b, long c) {
long long result = (a / b) * (1000 / c);
assert(result > 0);
// more code...
}
但是,assert 语句失败了。假设 a、b 和 c 都是正值。然后我认为“结果”由于某种原因最终变成了“结果== 0”。此处介绍的类型转换逻辑中是否存在某些固有因素导致我的代码失败?
我是 C++ 的新手,所以答案似乎很明显......
最佳答案
如果 c > 1000
,则表达式 (1000/c)
由于整数除法而变为零。因为两个操作数都是整数类型,所以这里进行整数除法。
结果,表达式 (a/b) * (1000/c)
变为零,因此 result
的值变为零,触发断言。
如果 b > a
也会发生同样的事情,原因同上。
如果整数除法不是您想要的,请像这样重写您的表达式:
long long result = long long((float(a) / b) * (1000.0f / c));
这会调用浮点除法而不是整数除法。 a
和 c
的值将被转换为浮点类型,以便计算结果。
关于c++ - 关于 "casting"变量的快速建议?非常短的功能需要调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682593/