Frações no lote

2

Por que o código a seguir retorna 0?

@echo off
set a=100
set /a a=%a%*(50/%a%)

echo %a%
pause

Eu assumo que é porque o batch em algum ponto avalia (50/100) como 0.5 e arredonda para zero porque ele não pode reter decimais antes de avaliar% a% *. Estou errado e como posso contornar isso?

    
por Lucas F 04.10.2015 / 19:06

2 respostas

2

O que você está tentando fazer é matemática de ponto flutuante com valores inteiros. Estes serão sempre coagidos em valores inteiros. Esta pergunta é sobre a mesma coisa: link < br> Essencialmente, você não pode fazer operações de ponto flutuante em um script em lote. Você precisará usar algum outro idioma / tecnologia para atingir o resultado pretendido.

    
por 04.10.2015 / 19:17
1

Por que o código a seguir retorna 0?

Arquivos em lote não suportam matemática de ponto flutuante. Para contornar essa limitação, você precisa usar outras linguagens de script.

Powershell e VBS são possibilidades:

Matemática em arquivos em lote do NT

Limitações

There is a severe limitation in batch math: it can only handle 32-bit integers.

...

There are no real workarounds that allow floating point math, except using other scripting languages. The only exception may be if you have a limited and fixed number of decimals (e.g. 2), then you can just multiply everything by 100. To display a decimal delimiter in the end results, concatenate the ineger divide by 100, followed by the decimal delimiter, followed by the modulo divide by 100:

SET Whole = Result / 100
SET "Fraction = Result %% 100"
SET Result=%Whole%.%Fraction%

This may break on the 32-bit limit, though.

In general, for floating point math I would recommend using other scripting languages.

Fonte Matemática em arquivos em lote do NT

    
por 04.10.2015 / 19:48