2013-11-27 4 views
-1

Почему значение k возвращает 0? Пожалуйста помоги.C++: преобразователь температуры - почему расчет возвращается 0

double fah, kel; 

fah = std::atof(input.c_str()); //convert string input to a double & assign value to be fah degree 
kel = (double)((f + 459.67) * (5/9)); //calculate fah temp to kelvin 

k значение возвращает 0, когда я добавляю «5/9» к расчёту.

ответ

4

В C++, 5/9 == 0 из-за целочисленного деления.

Использование 5.0/9.

2

Проблема состоит из целочисленного деления. В результате:

5/9 

является 0. Вы должны использовать тип с плавающей точкой:

5/9.0 // 9.0 is a double. 
+0

Почему только одно из этих двух чисел должно быть в десятичной форме? – user2925557

+1

@ user2925557 достаточно, чтобы один из операндов оператора деления '/' был типом с плавающей запятой (FP) для операции, которая должна быть рассчитана в FP (и результатом операции FP) – juanchopanza

+0

@ user2925557 an операция «int/double» или «double/int» автоматически повышается до результата «double». Для удобства чтения часто бывает полезно писать как двойную, хотя и не обязательную. –

0

Выражение 5/9 имеет интегральный тип, его результат равен 0. изменению (5/9), по крайней мере до (5,0/9)

0

Это проблема с целым делением. Кроме того, вы упростить уравнение немного:

Dk = C*Df + C*B ===> Dk = C*Df + A 

, где Dk является градус Кельвина, Df является градусов по Фаренгейту, C является 5/9 константа, а A является C*Kelvin Offset (также константа). Что сделало бы ваш код:

const double FtoKMultiplier = 5.0/9.0; // done at compile time 
const double FtoKOffset = 459.67 * FtoKMultiplier; // also done at compile time 
double fah = std::atof(input.c_str()); 
double kel = FtoKMultipler * fah + FtoKOffset; // single multiplication and addition at runtime 
Смежные вопросы