我正在为class做一项作业,我已经掌握了几乎所有的东西。它只需要获取一个框的宽度和高度,并输出面积以及需要多少油漆。我可以得到前三个部分,但只有当它是400的倍数(用于确定需要多少油漆的数字)时,它才会告诉我需要多少油漆。
我现在有这个:
#include <iostream>
using namespace std;
int main()
{
int wallHeight, wallWidth, wallArea;
cout << "Please enter the height of the wall (feet): ";
cin >> wallHeight;
cout << endl << "Please enter the width of the wall (feet): ";
cin >> wallWidth;
wallArea = wallHeight * wallWidth;
const double paintNeeded = wallArea / 400;
cout << endl << "The area of the wall is: " << wallArea << " square feet. "
<< "This will require about " << paintNeeded << " gallons of paint." << endl;
return 0;
}
假设我输入的墙是24x2。它会说面积是48,但它需要0加仑的油漆,我只想说它需要0.12加仑。
谢谢你的帮助。
将wallArea
转换为双重:
const double paintNeeded = (double)wallArea / 400;
在C++中,如果a
和b
都是整数,则使用整数运算来计算a/b
。
在您的代码中计算:
const double paintNeeded = wallArea / 400;
将在将结果(0)放入CCD_ 5之前使用整数算术执行除法。
将代码更改为:
const double paintNeeded = wallArea / 400.;
(注意400后面的点)将使用浮点运算进行除法,得到您期望的结果。
这里的问题是对2个整数进行运算。这将导致最终值存储为小数点为零的int。
在这里,您有以下行:
int wallHeight, wallWidth, wallArea;
其中您已经将您的3个主要变量声明为类型int
。然后在下面的行中,执行以下操作:
const double paintNeeded = wallArea / 400;
这里,即使您将wallArea / 400
的商存储在类型为double
的变量中,除法本身也在2个整数之间,因为wallArea
是int
变量,而400也被处理为int
值,因为它之后没有十进制值。
有多种方法可以解决此问题:
选项1:更改400的值,使其作为int处理
这可能是最简单的方法,但它无法控制要输出的小数位数。这可以简单地通过更改以下行来完成:
const double paintNeeded = wallArea / 400;
至:
const double paintNeeded = wallArea / 400.0;
这里唯一的区别是,400现在被处理为数据类型float
的值。这样,当您运行以下行时:
cout << endl << "The area of the wall is: " << wallArea << " square feet. "
<< "This will require about " << paintNeeded << " gallons of paint." << endl;
paintNeeded将输出0.12
而不是0。
选项2:使用铸造
这是将400更改为400.0的替代方案;在这里,您将要处理的变量wallArea
强制转换为double。参见此行:
const double paintNeeded = (double)wallArea / 400;
在这里,您可以强制编译器将wallArea中存储的值转换为double类型。在某些情况下(不是您的情况),这是有风险的,因为如果无法进行转换(例如,从类型int转换为字符串),则会导致错误。然而,在您的情况下,将int转换为double类型在这里是可行的,因此实际上,double值除以400不会出错。实际上,这与第一选择的结果相同;输出具有小数点的CCD_ 15。这种情况还导致paintNeeded
的输出等于0.12
而不是0。
这两种方法最适合您的情况,因为您不想输出特定数量的小数位数。但是,如果您对另一种方法感兴趣,可以使用#include <iomanip>
头文件中的setprecision(int precision_value)
。有关此方面的更多信息,请访问std::setprecision。