2015-03-31 79 views
1

我有两个函数作为一个更大的函数的一部分,我正在写作一个练习。这些功能的目的是将温度从华氏温度转换成摄氏温度,反之亦然。双功能只返回-0

我开始:

#include <iostream> 
using namespace std; 
double Celsius_to_Fahrenheit(double); 
double Fahrenheit_to_Celsius(double); 

摄氏到华氏正常工作:

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上的函数,两个函数都为非平凡参数打破!这更糟糕!

+7

欢迎整数除法的世界。试试'double C =((5.0/9.0)*(F - 32.0));'。 – Phylogenesis 2015-03-31 00:04:07

+4

摄氏温度到华氏温度也不起作用。 – user2357112 2015-03-31 00:04:11

+1

@ user2357112我只对零进行测试!傻我! – GFauxPas 2015-03-31 00:05:06

回答

4

其实我相信这两个功能都失败了。你只是不会注意到C-to-F失败,因为你得到一个非零的结果。

在C++中,除法的结果类型取决于操作数的类型,而不是最能准确表示结果的类型。换句话说,5/9是整数部分,并且会被截断为0.如果你使用类似5.0/9.0的东西,它会以双精度进行数学运算,并且很可能会给你一个你所期望的结果。

然而,如果你的内容带有截断结果你可以重新安排的条款,使其做到尽可能晚的可能舍入:double C = ((F - 32) * 5/9);