#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 программы.