华氏度到摄氏度的转换率仅为0.0和-0.0

我正在阅读我的Java方法书的第8章(方法,构造函数和字段),我的练习中遇到了问题。

提供的代码是Temperature.java

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.text.DecimalFormat; public class Temperature extends JApplet implements ActionListener { private JTextField displayF, displayC; private static DecimalFormat displayFormat = new DecimalFormat("0.0"); public void init() { Container c = getContentPane(); c.setBackground(Color.white); c.setLayout(new GridLayout(2, 2, 10, 0)); c.add(new JLabel(" Fahrenheit:")); c.add(new JLabel(" Celsius:")); displayF = new JTextField(6); displayF.setBackground(Color.yellow); displayF.addActionListener(this); c.add(displayF); displayC = new JTextField(6); displayC.setBackground(Color.yellow); displayC.addActionListener(this); c.add(displayC); } public void actionPerformed(ActionEvent e) { String s; double degrees; FCConverter fc = new FCConverter(); if ((JTextField) e.getSource() == displayF) { s = displayF.getText().trim(); degrees = Double.parseDouble(s); fc.setFahrenheit(degrees); degrees = fc.getCelsius(); displayC.setText(displayFormat.format(degrees)); } else { s = displayC.getText().trim(); degrees = Double.parseDouble(s); fc.setCelsius(degrees); degrees = fc.getFahrenheit(); displayF.setText(displayFormat.format(degrees)); } } } 

从那里我应该编写并测试FCConverter.java我已经提出:

 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.text.DecimalFormat; public class FCConverter { private double Celsius; private double Fahrenheit; public double setFahrenheit (double degrees) { Celsius = (degrees - 32) * (5 / 9); return 0; } public double getCelsius () { return Celsius; } public double setCelsius (double degrees) { Fahrenheit = (degrees * 9 / 5 + 32); return 0; } public double getFahrenheit () { return Fahrenheit; } } 

它在风格方面可能是可怕的,但我只想得到一些通过编译器的工作代码(因此“返回0;”我相当肯定可以以更加时尚的方式规避)。

我想知道的是,当我在appletviewer或浏览器中测试时,Celsius to Fahrenheit转换工作正常,但华氏温度到摄氏温度转换只产生0.0和-0.0。 我不明白什么是错的,因为我设计的部分似乎相当对称。 是不是两种转换方法都不起作用?

在整数数学(5/9)= 0。

和(度 – 32)*(5/9); 永远是0,你需要使用双打或其他东西。

问题似乎是5/9。 它们被视为一个整数,5/9是0.something,0为整数。 无论如何* 0 = + -0 🙂

在数字之后放置一个“d”,(5d / 9d)强制编译器将它们视为双精度数。

改变(5 / 9)(5.0 / 9.0)让java知道,你想要实数除法。

如果不返回任何内容,则将返回类型设置为void。 如果你想返回双打,你必须在计算中使用双打。 5/9始终为零,因为5和9是整数。 5.0 / 9.0是对双打的不同计算。

 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.text.DecimalFormat; public class FCConverter { private double Celsius; private double Fahrenheit; public void setFahrenheit (double degrees) { Celsius = (degrees - 32.0) * (5.0 / 9.0); } public double getCelsius () { return Celsius; } public void setCelsius (double degrees) { Fahrenheit = (degrees * 9.0 / 5.0 + 32.0); } public double getFahrenheit () { return Fahrenheit; } }