嘿伙计们我是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来表示我的所有变量。
答案 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)。这应该可以解决你的问题。