从华氏温度转换为摄氏温度时的舍入数(Java)?

从华氏温度转换为摄氏温度时的舍入数(Java)?,java,calculator,Java,Calculator,我在Java中从华氏温度转换为摄氏温度时遇到问题。我刚开始学习Java,现在仍在阅读书籍和教程 在我的第一个程序中,我试图创建一个基于的基本温度计算器 我想扩展它的功能,还包括华氏到摄氏的转换,以及基本摄氏到华氏的转换 因此,我使用给出的示例代码使摄氏温度到华氏温度的部分工作,现在,使用相同的代码,经过多次尝试和错误后稍微修改,使其工作,我正在尝试处理另一半。我让它在某种程度上起作用,但它并不完全正确 例如,当我输入89华氏度时,它返回31摄氏度,而不是预期的32摄氏度。我认为这是一个数字四舍五

我在Java中从华氏温度转换为摄氏温度时遇到问题。我刚开始学习Java,现在仍在阅读书籍和教程

在我的第一个程序中,我试图创建一个基于的基本温度计算器

我想扩展它的功能,还包括华氏到摄氏的转换,以及基本摄氏到华氏的转换

因此,我使用给出的示例代码使摄氏温度到华氏温度的部分工作,现在,使用相同的代码,经过多次尝试和错误后稍微修改,使其工作,我正在尝试处理另一半。我让它在某种程度上起作用,但它并不完全正确

例如,当我输入89华氏度时,它返回31摄氏度,而不是预期的32摄氏度。我认为这是一个数字四舍五入的问题,但我不确定如何着手解决它。我已经读了一些书,我认为可以通过将RoundingMode设置为“HALF_UP”来修复它,但我不确定如何做到这一点,使它只影响这个转换,而不影响另一个有效的转换。这就是我所拥有的:

int tempCel = (int) ((int)((Double.parseDouble(tempTextFieldFC.getText())) 
         - 32) * .55555);
tempCelLabel.setText(tempCel + " ° Celsius"); 

如能提供任何帮助或建议,将不胜感激。谢谢你抽出时间

tempCel应该声明为float,这样它就可以有分数值。 然后在打印时,您应该将tempCel四舍五入

double tempCel = (Double.parseDouble("1.45")- 32) * .55555;
System.out.println(Math.round(tempCel));

把你的计算细分:

double fahrenheit = Double.parseDouble(tempTextFieldFC.getText());
double celcius = (fahrenheit - 32) * 5 / 9;
tempCelLabel.setText(Math.round(celcius) + " ° Celsius");
去掉所有的
temp
前缀-它们没有多大意义。

用于执行舍入,而不是强制转换为
int
。铸造始终朝着0旋转,如下所示:

否则,如果浮点数不是无穷大,则将浮点数四舍五入为整数值V,使用IEEE 754向零舍入模式(第4.2.3节)向零舍入

请注意,
Math.round(double)
仍然声明返回一个
double
,因为它可能超出
int
long
的范围,但我认为这在您的情况下不是问题

我还建议您将代码拆分为多个语句:

String fahrenheitText = tempTextFieldFC.getText();
double fahrenheit = Double.parseDouble(fahrenheitText);
double celsius = ((fahrenheit - 32) * 5) / 9;
int celsiusRounded = (int) Math.round(celsius);
tempCelLabel.setText(celsiusRounded + "° Celsius");
使用以下命令:

long tempCel = Math.round((5.0 / 9.0) * (Double.parseDouble(tempTextFieldFC.getText()) - 32 ));
tempCelLabel.setText(tempCel + " ° Celsius"); 

我知道OP正在学习Java,但为了其他来这里寻求从华氏温度到摄氏温度转换的人,我建议使用具有许多功能的Java来开发科学应用程序。其中一个强大的功能也是从到的单位转换

下面是一个将华氏温度转换为摄氏温度的快速示例:

将华氏温度值保存为字符串,并将其解析为双精度。这两行与@Jon Skeet answer中的相同

String fahrenheitText = tempTextFieldFC.getText();
double fahrenheit = Double.parseDouble(fahrenheitText);
现在我们构建NonSISI单元。JScience包括基本单位,而不是 乘法单位,如公里和厘米。创造 对于这些单位,SI提供了构建复合单位的方法。请 有关更多信息,请参阅。对于详细的解释,我建议阅读,其中也有更多的例子

Unit<Temperature> FAHRENHEIT = NonSI.FAHRENHEIT;
Unit<Temperature> CELSIUS = SI.CELSIUS;
对于正确的舍入,我建议使用。现在我通常使用,但这取决于情况。对于华氏温度到摄氏温度的转换,我建议使用HALF_UP四舍五入。我们将设置为四舍五入到一位小数

celsius = celsius.setScale(1, RoundingMode.HALF_UP);
将值设置为标签

tempCelLabel.setText(celsius + "° Celsius");

这将无法编译-您正在尝试为
float
变量分配一个
double
值。您应该在2017年6月16日之前访问milion rep
tempCelLabel.setText(celsius + "° Celsius");