我有两个函数作为一个更大的函数的一部分,我正在写作练习。这些功能的目的是将温度从华氏温度转换为摄氏温度,反之亦然。
我从:
开始#include <iostream>
using namespace std;
double Celsius_to_Fahrenheit(double);
double Fahrenheit_to_Celsius(double);
Celsius-to-Fahrenheit工作正常:
double Celsius_to_Fahrenheit(double C){
double F = ((9 / 5)*C + 32);
return F;
}
但无论采用何种参数,华氏度到摄氏度函数都会返回-0
:
double Fahrenheit_to_Celsius(double F){
double C = ((5 / 9)*(F - 32));
return C;
}
第二个怎么了?我看不出会导致一个人工作的结构有什么不同而不是另一个。
编辑:我只测试了0
上的函数,两个函数都打破了非平凡的参数!那更糟糕了!
答案 0 :(得分:4)
实际上我相信BOTH功能都失败了。你只是没注意到C-to-F失败了,因为你得到了非零结果。
在C ++中,除法的结果类型取决于操作数的类型,而不是最准确地表示结果的类型。换句话说,5/9是整数除法,并将被截断为0.如果你使用类似5.0 / 9.0的东西,它会将数学作为双精度,并且很可能会给你一个结果你想要的。
但是,如果您对截断的结果感到满意,则可以重新排列这些字词,以便尽可能晚地进行舍入:double C = ((F - 32) * 5 / 9);