你如何得到一个等式输出一个小数的答案?

时间:2017-02-07 22:39:18

标签: c++

我正在上课,我几乎掌握了一切。它应该只取一个盒子的宽度和高度来输出面积以及需要多少涂料。我可以得到前三个部分,但它只会告诉我如果它是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加仑。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

wallArea转换为double:

const double paintNeeded = (double)wallArea / 400;

答案 1 :(得分:1)

在C ++中,如果ab都是整数,则使用整数运算来计算a/b

在你的代码中计算:

 const double paintNeeded = wallArea / 400;
在将结果(0)放入double之前,

将使用整数运算执行除法。

将代码更改为:

 const double paintNeeded = wallArea / 400.;

(注意400之后的点)将使用浮点运算执行除法,得到您期望的结果。

答案 2 :(得分:1)

你在这里遇到的问题是你正在对2个整数进行操作。这导致最终值存储为零小数点的int。

在这里,您有以下一行:

    int wallHeight, wallWidth, wallArea;

您已将3个主要变量声明为int类型。然后在以下行中执行以下操作:

    const double paintNeeded = wallArea / 400;

此处,即使您将wallArea / 400的商存储在double类型的变量中,分部本身也在2个整数之间,因为wallAreaint变量,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而没有错误。实际上,这与第一种选择具有相同的结果;输出带有小数点的paintNeeded。这种情况还会导致paintNeeded的输出等于0.12而不是0。

这两种方法对你的情况来说是最好的,因为你不想输出特定数量的小数位,。但是,如果您对其他方式感兴趣,可以使用setprecision(int precision_value)头文件中的#include <iomanip>。有关详细信息,请访问std::setprecision