Успешно проанализировал String в Double, но все последующие вычисления не удаются - PullRequest
2 голосов
/ 15 апреля 2011

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

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);  
            }  

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

Ответы [ 3 ]

5 голосов
/ 15 апреля 2011

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

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

2 голосов
/ 15 апреля 2011

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

2 голосов
/ 15 апреля 2011

Выражение

5/9

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

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

5.0/9.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...