Если нет причины делить знаменатель на edfbonus вместо умножения на него числителя, вы можете избежать проблемы делителя нуля, переставив вычисления:
set /a "hp = hp - ((atk*arandom*edefbonus)/(edef*6))"
Внешние скобки и кавычки не нужны, и в set / a есть оператор, который сохраняет некоторые операции ввода и приводит в порядок такие выражения:
set /a hp -= atk*arandom*edefbonus/(edef*6)
Так как вы упомянули округление, я добавлю это:
При условии, что значение справа от -=
оператора выше всегда положительно, самый простой способ выполнить округление:
set /a hp -= (10*atk*arandom*edefbonus/(edef*6)+5)/10
Обратите внимание, что мы умножаем на 10 до деления, а не после него, поэтому вычисление идет следующим образом:
10*2*2*8 =320 1*6 =6 320/6 =53 53+5 =58 58/10 =5
Если мы умножим на 10 после деления, как в
set /a hp -= (atk*arandom*edefbonus/(edef*6)*10+5)/10
,
расчет будет идти:
2*2*8 =32 1*6 =6 32/6 =5 (we just lost the fraction digit, so rounding won't work) 5*10 =50 50+5 =55 55/10 =5
Тот же результат, но только потому, что округление все равно было бы округлено вниз.