Celsius到Fahrenheit转换 - Java

时间:2015-09-23 23:21:57

标签: java

你好,我是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);
}

3 个答案:

答案 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之后除以。