2015-02-21 3 views
-1

У меня есть функция, которая возвращает тип double.двойное разделение продолжает давать мне «inf»

мое возвращение заявление

return sum/(double)(weight/100); 

где сумма является двойной и вес является внутр. я написал PRINTF заявления до возвращения проверить значения сумма была 25,000 и (двойной) (вес/100) дал мне 0,500
, но оператор возврата дал мне «Inf»

, что случилось с ним?

+1

Вы уверены, что это был (двойной) (вес/100), а не (двойной) вес/100, который дал вам .500? –

ответ

1

Похоже weight, вероятно, является целым числом, так weight/100 дает 0 и sum/0.0 дает inf. Просто перепишите его как:

return sum/(weight/100.0); 
+0

спасибо, что это сработало – Oxtis

0

Вы должны набрать вес сначала, чтобы удвоить. Теперь он делит int на 100 на новый int. (Который, вероятно, становится 0). Затем вы бросаете его в двойное, а затем делите сумму на эти ответы. Я хотел бы изменить его:

return sum/((double)weight)/100; 
1

Вы делаете целочисленное деление между weight и 100. Как насчет:

return 100 * sum/weight; 

С этим способом нужно умножить 100 и sum, и вы получите двойной снова, так как sum является двойной. Затем вы разделите двойной результат на целочисленный вес и не столкнетесь с проблемой целочисленного деления.

Смежные вопросы