提问人:Loading Screen 提问时间:9/18/2023 最后编辑:Loading Screen 更新时间:9/18/2023 访问量:82
当“=”左边的变量是 int,右边的变量是双精度时,我如何让 ceil 工作?
How do I get ceil to work when variable on left of '=' is an int, and variable on right is a double?
问:
编辑:为了重新表述这个问题,在将双精度值分配给使用 ceil 显示和舍入所述值的 int 变量时,如何避免截断?如果可能的话,在不改变他们的声明的情况下。
我的老师给我们布置了一个作业,我们需要制作一个公式,每 3 y 输出 1 x x,并使用 ceil 将变量 x 的值四舍五入,以便当 y 超过每 6 个时,添加一个额外的 x。
IIRC,他在课堂上说,我们需要使用static_cast,因为向对它们没有意义的数据类型声明变量是糟糕的编程实践。(例如,你不能有半个人。
起初,ceil 对我不起作用。我想我弄清楚了原因:
x = (y / 6.0);
我不断收到警告 C4244。我认为正在发生的事情是,因为 x 是一个 int,它从公式中截断了双精度值。当我将我的 int 变量声明为 double 时,ceil 起作用了,并且数字在输出中四舍五入。
不过,我认为我不能将这些变量声明为双精度。我认为我用错了static_cast,我看到的例子看起来像是要用在“=”的右边。在这种情况下,我不确定如何实现我想要的。
这些是我尝试重新排列static_cast使用它的一些方法:
static_cast<double>(x) = (y / 60); // 1 (gives error EO137: must be modifiable lvalue)
x = static_cast<double>(x = y / 6.0); // 2
static_cast<double>(x); // 3
x = (y / 6.0);
x = (y / 6.0); // 4
static_cast<double>(x);
x = static_cast<double>(x); // 5 (gives error C4700: uninitialized variable 'x' used)
x = (y / 6.0);
x = (y / 6.0);
x = static_cast<double>(x); // 6
(double)(int)x;
x = (y / 60); // 7 (another E0137)
这是 ceil() 语句:
cout << "\n\nThank you, " << name <<
". You've been assigned " << ceil(x) << " x's."
C4244 警告贯穿所有这些。我一直遇到一个悖论:在公式分配替身之前必须强制转换 x,但当我强制转换时 x 不能取消初始化。
我很高兴有人指出我在这里是个白痴,让我回到正轨,因为我在这方面花了太多时间。
答:
如果要进行浮点运算,然后应用 ceiling 函数,并将结果存储在整数中,则适当的方法是执行浮点除法,将 ceil 函数应用于结果,然后将其转换回整数。static_cast<int>
#include <iostream>
#include <cmath> // for ceil()
int main() {
int y = 19; // sample value for y
int x; // declare x as an int as required
double intermediateResult = static_cast<double>(y) / 6.0;
x = static_cast<int>(std::ceil(intermediateResult));
std::cout << "You've been assigned " << x << " x's." << std::endl;
return 0;
}
在这里,第一个显式转换为 a,以确保在浮点运算中执行除法。我们将此结果存储在 intermediateResult 中。static_cast<double>
y
double
然后,我们将函数应用于 。的结果是一个浮点数,然后我们使用 将其转换回整数并存储在 中。ceil()
intermediateResult
ceil()
static_cast<int>
x
我重写了我的代码,看起来像这样:
int x = ceil(y / 6.0);
cout << x;
它奏效了。我认为类型强制会造成双精度,所以结果是双精度,并在将其分配给之前将其四舍五入。无需 .我只是在错误的地方。y
ceil
x
static_cast
ceil
评论
ceil
x=(y+2)/3;
y