首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >华氏到摄氏度的转换仅产生0.0和-0.0

华氏到摄氏度的转换仅产生0.0和-0.0
EN

Stack Overflow用户
提问于 2011-09-07 04:40:23
回答 5查看 4.9K关注 0票数 4

我正在读我的Java方法书的第8章(方法、构造器和字段),我的一个练习遇到了问题。

提供的代码为Temperature.java

代码语言:javascript
复制
  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:

代码语言:javascript
复制
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;
  }
}

这在风格上可能是可怕的,但我只是想得到一些可以通过编译器的工作代码(因此"return 0;“我相当肯定可以用一种更时髦的方式来规避)。

我想知道的是,当我在appletviewer或浏览器形式中测试它时,摄氏度到华氏度的转换工作正常,但华氏到摄氏度的转换只产生0.0和-0.0。我不明白出了什么问题,因为我设计的部分看起来相当对称。两种或两种转换方法都不起作用的情况不应该是这样吗?

EN

回答 5

Stack Overflow用户

发布于 2011-09-07 04:44:17

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

和(度- 32) * (5 / 9);将始终为0,您需要使用双精度或其他值。

票数 3
EN

Stack Overflow用户

发布于 2011-09-07 04:45:32

问题似乎是5/9,他们被看作是一个整数,而5/9是0,这是一个整数。所以无论*0= +-0 :)

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

票数 3
EN

Stack Overflow用户

发布于 2011-09-07 04:47:13

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

代码语言:javascript
复制
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;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7325882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档