2013-06-22 2 views
-3

Не мог бы кто-нибудь объяснить, почему это не работает? Все переменные, кроме случайных, - это ints, тогда как вероятность - двойная. Когда я печатаю все значения, они определенно правильны ... но шанс всегда выдается как 0.0. Я знаю, что это как-то связано с преобразованием ints в double, поскольку у меня была проблема, подобная этому несколько раз раньше. Каков ключ к тому, чтобы заставить его делать то, что вы хотите?Двойной всегда возвращает 0 при делении ints

gladValue = (glad.dexterity+glad.tactical+weaponSkill); 
    oppValue = (glad.target.dexterity+glad.target.tactical+glad.target.agility); 
    chance = (gladValue/oppValue)*10.0; 

Благодаря

ответ

3

Вы должны написать gladValue * 10.0/oppValue вместо этого.

Причина довольно тонкая. Ваши скобки означают, что сначала вычисляется gladValue/oppValue. Но эти переменные являются целыми числами, поэтому результат является целым числом, и поэтому вы теряете часть дроби. Только когда он будет умножен на 10.0, он будет увеличен до double; но к тому времени уже слишком поздно.

Если вы делаете то, что я говорю тогда, учитывая, что * и/имеют одинаковый приоритет, а операции выполняются слева направо, то при вычислении gladValue * 10.0 gladValue продвигается до плавающей запятой, и результат с плавающей запятой деленный на oppValue.

+0

Является ли сделка, которая требуется для ее первой операции? Изменить: я вижу ваше редактирование. Спасибо. –