Java程序错误,将Farenheit转换为摄氏度

Java程序错误,将Farenheit转换为摄氏度,java,math,floating-point,type-conversion,jtextfield,Java,Math,Floating Point,Type Conversion,Jtextfield,我遇到了一个java程序的问题,一台java E6B飞行计算机,突然它停止了华氏温度到摄氏温度的转换,它总是输出0,不管是什么值,摄氏温度到华氏温度写得相似,工作正常,两个函数都写到日志文件中,这样就可以了,除此之外,对于日志文件中的任何输入,华氏到摄氏的温度都显示为0。(我知道我拼错了华氏温度)。我考虑过换成双人的而不是浮动的 下面是这两个函数的代码。还包括舍入功能 public static String celstofare(String Celsius){ // functio

我遇到了一个java程序的问题,一台java E6B飞行计算机,突然它停止了华氏温度到摄氏温度的转换,它总是输出0,不管是什么值,摄氏温度到华氏温度写得相似,工作正常,两个函数都写到日志文件中,这样就可以了,除此之外,对于日志文件中的任何输入,华氏到摄氏的温度都显示为0。(我知道我拼错了华氏温度)。我考虑过换成双人的而不是浮动的

下面是这两个函数的代码。还包括舍入功能

public static String celstofare(String Celsius){

    // function level
    float a;
    // if user types string, returns error
    try
    {
        a = Float.parseFloat(Celsius);
                    float math = ((a * (9/5)) + 32);
                    String out = round(math, 2) +"";
                    // log file update mechanism
                            File file = new File("log.txt");
                            FileWriter writer;
                            try {
                                writer = new FileWriter(file, true);
                                PrintWriter printer = new PrintWriter(writer);
                                Date date = new Date();
                                String strDate = date.toString();
                                printer.println("Converted Celsius to Farenheit  on: " + strDate);
                                printer.println("Celsius: " + a + "Farenheit: " + out);
                                printer.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
        return out;
    }
    catch (Exception e)
    {
        return "error";
    }

}

    public static String faretocels(String Farenheit){

    // function level
    float a;
    // if user types string, returns error
    try
    {
        a = Float.parseFloat(Farenheit);
                    float math = ((a - 32) * (5/9));
                    String out = round(math, 2) +"";
                    // log file update mechanism
                            File file = new File("log.txt");
                            FileWriter writer;
                            try {
                                writer = new FileWriter(file, true);
                                PrintWriter printer = new PrintWriter(writer);
                                Date date = new Date();
                                String strDate = date.toString();
                                printer.println("Converted Farenheit to Celsius on: " + strDate);
                                printer.println("Farenheit: " + a + "Celsius: " + out);
                                printer.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
        return out;
    }
    catch (Exception e)
    {
        return "error";
    }

}
    public static BigDecimal round(double d, int decimalPlace) {
    BigDecimal bd = new BigDecimal(Double.toString(d));
    bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);       
    return bd;
}
这是调用它的函数和动作侦听器,其他一切都可以工作,我已经验证了设置了正确的输入和输出。输入和输出框是JTextFields

        else if (e.getSource() == btnCalculateConversion){
                    mphOut.setText(Conversions.KnotstoMph(knots.getText()));
                    knotsOut.setText(Conversions.mphtoknots(mph.getText()));
                    nmout.setText(Conversions.mphtoknots(mph.getText()));
                    miout.setText(Conversions.KnotstoMph(knots.getText()));
                    poundsout.setText(Conversions.galtopound(gal.getText()));
                    galout.setText(Conversions.poundtogal(pounds.getText()));
                    tempfout.setText(Conversions.celstofare(tempc.getText()));
                    tempcout.setText(Conversions.faretocels(tempf.getText()));
9/5
被计算为整数除法,或1<代码>一个*9/5可以避免这个问题,因为评估是从左到右的

奇怪的是,这会导致每次的温度都是
a+32
,而不是
0
。因此,可能的含义是,
摄氏度
parseFloat
中被评估为
0
。您是否尝试过单步通过调试器查看
a
的值

9/5
被计算为整数除法,或1<代码>一个*9/5可以避免这个问题,因为评估是从左到右的

奇怪的是,这会导致每次的温度都是
a+32
,而不是
0
。因此,可能的含义是,
摄氏度
parseFloat
中被评估为
0
。您是否尝试过单步通过调试器查看
a
的值

9/5
被计算为整数除法,或1<代码>一个*9/5可以避免这个问题,因为评估是从左到右的

奇怪的是,这会导致每次的温度都是
a+32
,而不是
0
。因此,可能的含义是,
摄氏度
parseFloat
中被评估为
0
。您是否尝试过单步通过调试器查看
a
的值

9/5
被计算为整数除法,或1<代码>一个*9/5可以避免这个问题,因为评估是从左到右的


奇怪的是,这会导致每次的温度都是
a+32
,而不是
0
。因此,可能的含义是,
摄氏度
parseFloat
中被评估为
0
。您是否尝试过单步通过调试器查看
a
的值是多少?

因为当您在从华氏温度转换为摄氏温度时执行5/9除法部分,Java认为它是纯整数除法,将舍入到零,然后假设在原始温度减去32后乘以零


解决方案是强制Java进行浮点除法,这可以通过5.0/9、5/9.0甚至5.0/9.0来实现。然后Java将确保不会发生舍入到零的情况,并且您的答案不会是零,除非需要。

因为当您在从华氏温度转换到摄氏温度时进行5/9除法运算时,Java认为它是纯整数除法,将舍入到零,然后假设在原始温度减去32后乘以零


解决方案是强制Java进行浮点除法,这可以通过5.0/9、5/9.0甚至5.0/9.0来实现。然后Java将确保不会发生舍入到零的情况,并且您的答案不会是零,除非需要。

因为当您在从华氏温度转换到摄氏温度时进行5/9除法运算时,Java认为它是纯整数除法,将舍入到零,然后假设在原始温度减去32后乘以零


解决方案是强制Java进行浮点除法,这可以通过5.0/9、5/9.0甚至5.0/9.0来实现。然后Java将确保不会发生舍入到零的情况,并且您的答案不会是零,除非需要。

因为当您在从华氏温度转换到摄氏温度时进行5/9除法运算时,Java认为它是纯整数除法,将舍入到零,然后假设在原始温度减去32后乘以零


解决方案是强制Java进行浮点除法,这可以通过5.0/9、5/9.0甚至5.0/9.0来实现。然后,Java将确保不会发生四舍五入到零的情况,并且您的答案不会为零,除非它需要为零。

所有答案都非常好,但由于您是一名学生,我将补充一点:

这种方法应该做一件事,也只有一件事:将温度从法伦海特转换成塞尔修斯。就这样。禁止写入文件或其他任何内容。在方法之外这样做

你到底为什么要把线传来传去?温度是数字;使用它们

学习Sun Java编码标准。变量名以小写字母开头,类名以大写字母开头

因此,您的方法应该如下所示:

public class TemperatureConverter {

    private TemperatureConverter() {}

    public static double celciusToFarenheit(double celcius) {
        return 1.8*celcius + 32.0;    
    }

    public static double farenheitToCelcius(double farenheit) {
        return (farenheit - 32.0)/1.8;
    }
}

所有的答案都很好,但我要补充一点,因为你是一名学生:

这种方法应该做一件事,也只有一件事:将温度从法伦海特转换成塞尔修斯。就这样。禁止写入文件或其他任何内容。在方法之外这样做

你到底为什么要把线传来传去?温度是数字;使用它们

学习Sun Java编码标准。变量名以小写字母开头,类名以大写字母开头

因此,您的方法应该如下所示:

public class TemperatureConverter {

    private TemperatureConverter() {}

    public static double celciusToFarenheit(double celcius) {
        return 1.8*celcius + 32.0;    
    }

    public static double farenheitToCelcius(double farenheit) {
        return (farenheit - 32.0)/1.8;
    }
}
所有答案