Java - метод преобразования Кельвина в Фаренгейта

Сейчас я работаю над довольно простой программой. Что он делает, так это конвертирует градусы Фаренгейта или Цельсия в кельвины, а затем, в зависимости от того, что запрашивает пользователь (f или c), это значение кельвина преобразуется и возвращается либо в градусы Цельсия, либо в градусы Фаренгейта.

Мое преобразование по Цельсию, кажется, работает просто отлично, но по Фаренгейту это совсем другая история. Наш профессор говорит, что наш вывод должен соответствовать данному примеру на 100%, и когда я задаю значение в градусах Цельсия и запрашиваю градусы Цельсия обратно, он всегда возвращает значение, которое я изначально ввел.

Однако при преобразовании 95 градусов по Цельсию в градусы по Фаренгейту я получил следующее: 203.28800000000007 Значение, которое я должен был получить, было: 203,0.

Я опубликую класс, который содержит все мои методы преобразования, но может ли кто-нибудь помочь мне с тем, где я могу ошибаться? Мне кажется, что на основе моей формулы она просто возвращает часть формулы, которая добавляет/вычитает 32. Я пробовал альтернативные форматы формулы, но ничего не работает.

public class Temperature 

{

// Instance variable

   private double degreesKelvin; // degrees in Kelvin

// Constructor method: initialize degreesKelvin to zero

   public Temperature() 
   {
      degreesKelvin = 0;
   }

// Convert and save degreesCelius in the Kelvin scale

   public void setCelsius(double degreesCelsius) 
   {
      degreesKelvin = degreesCelsius + 273.16;
   }

// Convert degreesKelvin to Celsius and return the value

   public double getCelsius() 
   {
      double c = degreesKelvin - 273.16;
      return c;
   }

// Convert and save degreesFahrenheit in the Kelvin scale

   public void setFahrenheit(double degreesFahrenheit) 
   {
      degreesKelvin = (5/9 * (degreesFahrenheit - 32) + 273);
   }

// Convert degreesKelvin to Fahrenheit and return the value

   public double getFahrenheit() 
   {
      double f = (((degreesKelvin - 273) * 9/5) + 32);
      return f;
   }

}

Спасибо за любую помощь, я пытался найти решение этой проблемы, но пока ничего не работает.


person Alzecha    schedule 27.02.2014    source источник
comment
203.28800000000007 можно масштабировать, чтобы вернуть 203,2, и у вас нет способа поставить градусы Фаренгейта и вернуть градусы Фаренгейта!   -  person ItachiUchiha    schedule 27.02.2014
comment
Используйте 5,0/9 вместо 5/9 и 9,0/5 вместо 9/5.   -  person Aman Agnihotri    schedule 27.02.2014


Ответы (2)


Следите за целочисленным делением, результат 2 целых чисел (при делении) дает целое число:

5/9 = 0
9/5 = 1

Чтобы исправить это, приведите 1 из них к плавающему типу, например:

5d/9 //or 5.0/9

И так же с

9d/5 //or 9.0/5
person Josh M    schedule 27.02.2014
comment
О, сработало отлично, спасибо! Мой профессор еще не научил нас этому. Некоторые числа все еще немного отличаются от моего крошечного поля, но я думаю, что смогу их округлить. - person Alzecha; 27.02.2014

Проблема возникает из-за того, что при хранении вы добавляете 273,16 к градусам Цельсия. Дополнительный .16 вводит эту ошибку. для 95 градусов Цельсия

градус Кельвина = 273,16+95

теперь при возврате становится

5/9*(273.16+95-273) +32 == 5/9(95.16)+32 == 203.2

пока

5/9*(273+95-273) + 32 == 203

person SameeraGupta    schedule 27.02.2014
comment
К сожалению, .16 является обязательным согласно формуле конвертации. Хотя ответ для этого единственного преобразования оказался 203,0, другие примеры, которые нам дали, могли содержать много чисел после запятой. Тот факт, что я не получил точно 203,0, просто посылает сигнал о том, что мои формулы где-то неверны. - person Alzecha; 27.02.2014