C++ 仅返回-0的双函数

C++ 仅返回-0的双函数,c++,function,C++,Function,作为一个更大的函数的一部分,我有两个函数作为练习。这些功能的目的是将温度从华氏温度转换为摄氏温度,反之亦然 我首先说: #include <iostream> using namespace std; double Celsius_to_Fahrenheit(double); double Fahrenheit_to_Celsius(double); 但无论采用何种参数,华氏温度到摄氏温度函数都返回-0: double Fahrenheit_to_Celsius(double F)

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

我首先说:

#include <iostream>
using namespace std;
double Celsius_to_Fahrenheit(double);
double Fahrenheit_to_Celsius(double);
但无论采用何种参数,华氏温度到摄氏温度函数都返回-0:

double Fahrenheit_to_Celsius(double F){
    double C = ((5 / 9)*(F - 32));
    return C;
}
第二个怎么了?我看不出任何结构上的差异,这会导致一个工作,而不是另一个


编辑:我只在0上测试了函数,两个函数都因非平凡参数而中断!那更糟

事实上,我认为这两种功能都失败了。你只是没有注意到C-to-F失败是因为你得到了一个非零的结果

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


然而,如果你对一个被截断的结果感到满意,你可以重新排列这些术语,使其尽可能晚地进行四舍五入:双C=F-32*5/9

事实上,我认为这两种功能都失败了。你只是没有注意到C-to-F失败是因为你得到了一个非零的结果

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


然而,如果你对一个被截断的结果感到满意,你可以重新排列这些术语,使其尽可能晚地进行四舍五入:双C=F-32*5/9

欢迎来到整数除法的世界。试试双C=5.0/9.0*F-32.0;。摄氏到华氏温度的函数也不起作用。@user2357112我只在零上测试过它!我真傻!欢迎来到整数除法的世界。试试双C=5.0/9.0*F-32.0;。摄氏到华氏温度的函数也不起作用。@user2357112我只在零上测试过它!我真傻!
double Fahrenheit_to_Celsius(double F){
    double C = ((5 / 9)*(F - 32));
    return C;
}