double函数只返回-0

时间:2015-03-31 00:00:27

标签: c++ function

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

我从:

开始
#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上的函数,两个函数都打破了非平凡的参数!那更糟糕了!

1 个答案:

答案 0 :(得分:4)

实际上我相信BOTH功能都失败了。你只是没注意到C-to-F失败了,因为你得到了非零结果。

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

但是,如果您对截断的结果感到满意,则可以重新排列这些字词,以便尽可能晚地进行舍入:double C = ((F - 32) * 5 / 9);