你好,我是Java的新手,所以我还是熟悉它。现在我正在上课做实验,而且我已经弄明白了,但是我们需要将摄氏温度转换为华氏温度。我有点难过,因为我们需要将第一次转换保留为int数据类型。
在我们的实验室中,我们有测试类,根据测试类,第一次转换(int数据类型)输入-40摄氏度,运行转换方法,并且应该得到-40华氏度的结果。
这实际上是一个用户定义的类,叫做我正在写的转换。
这是我现在正在处理的片段:
public static int celsiusToFahrenheit(int temp)
{
return (temp * (9/5)) + 32;
}
public static double celsiusToFahrenheit(double temp)
{
return (temp * (9.0/5.0)) + 32.0;
}
第二部分工作正常,输入12.5摄氏度并返回华氏54.5度。
正如我所提到的,我对Java仍然很陌生,所以如果您需要我的其他任何内容,请告诉我。
问题我问,抱歉 - 有关如何编写return语句以便正确转换的任何想法?
编辑:我已经纠正过了。我意识到整数会给我一个圆润的价值,但我不确定如何绕过它。我明白我无法在这里输入类型,所以我甚至没有尝试将它显式地转换回int。一切都很顺利:
public static int celsiusToFahrenheit(int temp)
{
return (int) ((temp * (9.0/5.0)) + 32);
}
答案 0 :(得分:2)
您的int版本在(9/5)部分失败。由于9和5都是整数,因此除法的结果将是int( - > 1),因此它将计算temp * 1 + 32.尝试在该除法中使用至少1个float或double,以促进导致浮点精度。
由于我还无法添加评论,您应该注意到,没有强制转换的建议解决方案不会为所有输入产生相同的答案。
(int)(-1 * (9 / 5.0) + 32) // 30
-1 * 9 / 5 + 32 // 31
30更接近实际正确的结果,30.2 即使你要返回一个int,你通常应该尽可能晚地将你丢失的部分放在那里以避免舍入错误等。
答案 1 :(得分:0)
但是你没有写问题;)!
public static double celsiusToFahrenheit(int temp)
{
return (temp * (9.0/5)) + 32;
}
public static double celsiusToFahrenheit(double temp)
{
return (temp * (9.0/5.0)) + 32.0;
}
答案 2 :(得分:0)
这是一个不使用类型转换的解决方案
第一种方法中的9/5
是整数除法,结果为
-40 * 1 + 32 = 8
将返回表达式重写为(temp * 9 / 5 ) + 32
(删除9/5
周围的括号。这将首先强制temp * 9
,然后在5之后除以。