无法得到否定答案

时间:2014-01-21 21:27:13

标签: c++

嘿伙计们我是C ++的新手,而我在使用等式将华氏度改为摄氏度时遇到了麻烦。

// Fahrenheit -> Celcius
if (c==1) {
    cout << "\nPlease give the temperature in degrees Fahrenheit: ";

    cin >> fah;

    cel=(5/9)*(fah-32);

    cout << "\n" << fah << " degrees Fahrenheit corresponds to " << cel << " degrees Celcius.";
}

当我输入低于32的fah值时,我的度数为celcius的回答为-0。如何获得低于0的值作为答案?顺便说一句,我使用float来表示我的所有变量。

4 个答案:

答案 0 :(得分:9)

5/9是整数运算,因此等于0。

尝试使用(5.0/9)来鼓励编译器使用浮点数。或者,使用(5.f/9)

答案 1 :(得分:1)

问题在于你无意中转换为整数 - 所以你的分数会被截断。

建议更改:

if (c==1) {
    cout << "\nPlease give the temperature in degrees Fahrenheit: ";
    cin >> fah;
    cel=(5.0/9.0)*(fah-32.0);
    cout << "\n" << fah << " degrees Fahrenheit corresponds to " << cel << " degrees Celcius.";
}

答案 2 :(得分:0)

尝试使用double而不是int来允许良好的十进制结果,而不是每次转换都是一对一

编辑:尝试将您的5/9更改为小数但是,将此代码复制到referance我将您的变量“C”设置为1,这样我就不必过多地更改原始代码了。这些不是最受欢迎的编码实践,但它是您问题的答案。

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
double c=1;
double fah=0;
double cel=0;

// Fahrenheit -> Celcius
if (c==1) {
cout << "\nPlease give the temperature in degrees Fahrenheit: ";

cin >> fah;

cel=(.5556)*(fah-32);

cout << setprecision(3)<<"\n" << fah << " degrees Fahrenheit corresponds to " << cel << "    degrees Celcius.";
}//endif
system ("pause");
return 0;

}

答案 3 :(得分:0)

您也可以对float函数进行类型转换(5/9)。它可以写成((float)5/9)。这应该可以解决你的问题。