我有两个函数作为我正在编写的一个更大函数的一部分作为练习。这些函数的目的是将华氏温度转换为摄氏温度,反之亦然。
我开始于:
#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;
}
但是 Fahrenheit-to-Celsius 函数返回 -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 之类的东西,它会以 double 进行数学运算,并且很可能会得到这样的结果你想要的。
如果您对截断的结果感到满意,您可以重新排列项,使其尽可能晚地进行舍入:double C = ((F - 32) * 5/9);
关于c++ - 双函数只返回 -0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358380/