Почему следующий код возвращает 0?
Пакетные файлы не поддерживают математику с плавающей запятой. Чтобы обойти это ограничение, вы должны использовать другие языки сценариев.
Powershell и VBS - это возможности:
Математика в пакетных файлах NT
Ограничения
Существует серьезное ограничение в пакетной математике: она может обрабатывать только 32-разрядные целые числа.
...
Нет реальных обходных путей, позволяющих использовать математику с плавающей запятой, кроме использования других языков сценариев. Единственным исключением может быть, если у вас ограниченное и фиксированное количество десятичных знаков (например, 2), тогда вы можете просто умножить все на 100. Чтобы отобразить десятичный разделитель в конечных результатах, объедините деление Ингера на 100, затем десятичный разделитель и деление по модулю на 100:
SET Whole = Result / 100
SET "Fraction = Result %% 100"
SET Result=%Whole%.%Fraction%
Это может нарушить 32-битный лимит.
В целом, для математики с плавающей точкой я бы рекомендовал использовать другие языки сценариев.
Исходный Math в пакетных файлах NT