我是Stack Overflow的新手,也是一般的编程。我参加了一些编程C ++的课程,并且遇到了一个我有点麻烦的作业。这个程序应该采取华氏温度并将其转换为摄氏温度。我见过其他程序,但找不到我特定问题的副本。这是我的代码。
#include <iostream>
using namespace std;
int main()
{
int fahrenheit;
cout << "Please enter Fahrenheit degrees: ";
cin >> fahrenheit;
int celsius = 5.0 / 9 * (fahrenheit - 32.0);
cout << "Celsius: " << celsius << endl;
return 0;
}
所以这对于运行的5个测试中的4个非常有用。它的轮数为22.22到22和4.44到4,但是当输入0 F时,它将-17.77舍入到-17而不是-18。我已经研究了大约一个小时,并希望得到一些帮助!谢谢。
答案 0 :(得分:5)
使用std::round()
而不是依赖从double
到int
的隐式转换。无论是,还是根本不使用转换,都将温度显示为double
。
编辑:正如其他人已经指出的那样,隐式转换不会舍入,而是截断这个数字(简单地切断小数点后的所有内容)点)。
答案 1 :(得分:2)
当编译器将浮点数转换为整数时,它不会舍入,截断。即它只是在小数点后切割数字。所以你的程序就像编程一样。
答案 2 :(得分:2)
整数向下舍入,就像强制转换为整数类型一样。
最有可能的是,使用float
代替int
会得到最明智的结果:
#include <iostream>
using namespace std;
int main()
{
int fahrenheit;
cout << "Please enter Fahrenheit degrees: ";
cin >> fahrenheit;
float celsius = 5.0 / 9 * (fahrenheit - 32.0);
cout << "Celsius: " << celsius << endl;
return 0;
}
要获得看起来很正常的输出(定点如“14.25”,用e表示法不科学),在打印浮点数之前将std::fixed
传递给cout。您还可以使用cout.precision()
设置输出中的数字位数。
如果由于其他原因需要int,请在表达式的右侧使用std::round()
。
答案 3 :(得分:0)
int x = 3.99;
int y = std::round(3.99);
std::cout
<< "x = " << x << std::endl
<< "y = " << y << std::endl
;
-->
x = 3
y = 4
当static_cast<int>
将浮点数转换为int时,C / C ++没有进行浮点运算。如果要进行舍入,则需要调用库函数std::round()