所以我目前正在开发一个非常简单的程序。它的作用是将华氏温度或摄氏温度转换为开尔文值,然后根据用户请求(f或c)将开尔文值转换并返回为摄氏或华氏温度。
我的Celsius转换似乎工作得很好,但华氏是一个不同的故事。我们的教授说我们的输出必须与给定的例子100%匹配,当我给出Celsius值并请求Celsius时,它总是返回我最初输入的值。
然而,当我将95摄氏度转换为华氏温度时,我得到了这个:203.28800000000007 我应该得到的价值是:203.0 此外,当我输入50华氏温度并要求它返回华氏温度时,我得到了这个:32.0。
我会发布包含我所有转换方法的类,但是有人可以帮我解决我可能出错的地方吗?它看起来像我的公式,它只是返回添加/减去32的公式的一部分。我已经尝试了公式的替代格式,但似乎没有任何工作。
public class Temperature
{
// Instance variable
private double degreesKelvin; // degrees in Kelvin
// Constructor method: initialize degreesKelvin to zero
public Temperature()
{
degreesKelvin = 0;
}
// Convert and save degreesCelius in the Kelvin scale
public void setCelsius(double degreesCelsius)
{
degreesKelvin = degreesCelsius + 273.16;
}
// Convert degreesKelvin to Celsius and return the value
public double getCelsius()
{
double c = degreesKelvin - 273.16;
return c;
}
// Convert and save degreesFahrenheit in the Kelvin scale
public void setFahrenheit(double degreesFahrenheit)
{
degreesKelvin = (5/9 * (degreesFahrenheit - 32) + 273);
}
// Convert degreesKelvin to Fahrenheit and return the value
public double getFahrenheit()
{
double f = (((degreesKelvin - 273) * 9/5) + 32);
return f;
}
}
感谢您的帮助,我尝试寻找这个问题的解决方案,但到目前为止似乎对我没有任何帮助。
答案 0 :(得分:2)
注意整数除法,2个整数的结果(分割时)产生一个整数:
5/9 = 0
9/5 = 1
要解决此问题,请将其中一个转换为浮动类型,例如:
5d/9 //or 5.0/9
同样
9d/5 //or 9.0/5
答案 1 :(得分:0)
问题正在发生,因为在存储时你正在摄取摄氏度273.16。额外的.16引入了这个错误。 为95度celsiun
degreeKelvin = 273.16 + 95
现在返回时变为
5/9 *(273.16 + 95-273)+32 == 5/9(95.16)+32 == 203.2
,而
5/9 *(273 + 95-273)+ 32 == 203