Успешно преобразовал строку в Double, но все последующие вычисления завершились неудачей

#java #parsing

#java #синтаксический анализ

Вопрос:

Я пишу программу для моего класса Java, и нас попросили разработать программу с использованием GUI, которая принимает значение температуры и преобразует в другие, например, из градуса Фаренгейта в Цельсий и Кельвин. Однако я столкнулся с проблемой:

 if (event.getSource() == fahrText)  
                {  
                string = event.getActionCommand();  
                tempF = Double.parseDouble(string);  
                tempC = (tempF - 32) * (5/9);  
                tempK = tempC   273.15;  
                resultF.setText("Fahr: "   tempF);  
                resultC.setText("Cels: "   tempC);  
                resultK.setText("Kelv: "   tempK);  
            }  
  

Независимо от того, какое число я ввожу в JTextField «fahrText», я получаю Celsius как 0, в то время как tempF показывает введенное мной значение. Есть предложения относительно того, почему? Я использовал Double.valueOf(string) с теми же результатами.

Ответ №1:

Try 5.0/9.0 5/9 является целочисленным делением и равно 0. Целочисленное деление дает вам целое число — независимо от того, какому типу вы случайно присвоили результат.

Вы также могли бы сохранить private final static double FToCFactor = 5.0/9.0; и умножить на это.

Ответ №2:

Выражение

 5/9
  

представляет собой целочисленное деление. Результатом этого выражения является 0 .

Что вам нужно, так это деление с плавающей запятой. Это может быть достигнуто с помощью

 5.0/9.0
  

Ответ №3:

Используйте константы double (например, 32.0d ) вместо целых чисел для всей вашей математики. В итоге вы выполняете математику целых чисел вместо математики с плавающей запятой.

Комментарии:

1. Спасибо! Я немного смущен, не могу поверить, что я этого не видел. Думаю, я был слишком сосредоточен на аспекте GUI программы.