En esta segunda version e ampliado el comando hasta las cuatro acciones aritmeticas basicas (Sumar, restar, multiplicar y dividir) con numeros reales, quiero avisar antes de que se me hechen al cuello de que el segundo decimal no suele ser totalmente exacto hay una variacion respecto a una calculadora, esto se deve a que CMD tiende a redondear los resultados cuando la operacion no devuelve un numero entero por lo demas va medianamente bien, os dejo el codigo para que le hecheis un vistazo.
Sintaxis:
float xx,yy + xx,yy
float xx,yy - xx,yy
float xx,yy * xx,yy
float xx,yy / xx,yy
for /f "tokens=*"
%%a in ('
set /a "operando1=
%1,
%2"'
) do ( set decimales1=
%%a) for /f "tokens=*"
%%b in ('
set /a "operando2=
%4,
%5"'
) do (set decimales2=
%%b) if "
^%operador
%s" == "
^+s"
(goto sumar
) if "
^%operador
%s" == "
^-s"
(goto restar
) if "
^%operador
%s" == "
^*s"
(goto multiplicar
) if "
^%operador
%s" == "
^/s"
(goto dividir
)
:sumar
set /a RsEntero=
%entero1% %operador% %entero2% set /a RsDecimal=
%decimales1% %operador% %decimales2% if "100"
GEQ "
%RsDecimal%"
(set /a "RsEntero=
%RsEntero% +
%RsDecimal:~0,1%"
) set "resultado=
%RsEntero%,
%RsDecimal%"
:restar
set /a RsEntero=
%entero1% %operador% %entero2% set /a RsDecimal=
%decimales1% %operador% %decimales2% if "
%decimales1%"
LSS "
%decimales2%"
(set "decimales1=1
%decimales1%"
& set /a "entero1=
%entero1%-1"
& goto uno
) if "
%decimales2%"
LSS "
%decimales1%"
(set "decimales2=1
%decimales2%"
& set /a "entero2=
%entero2%-1"
& goto dos
)
:uno
set /a RsDecimal=
%decimales1%-
%decimales2% set /a RsEntero=
%entero2%%operador%%entero1% set resultado=
%RsEntero%,
%RsDecimal%
:dos
set /a RsDecimal=
%decimales2%-
%decimales1% set /a RsEntero=
%entero2%%operador%%entero1% set resultado=-
%RsEntero%,
%RsDecimal%
:multiplicar
set /a RsEntero=
%entero1% %operador% %entero2% set /a RsDecimal=
%decimales1% %operador% %decimales2% set line1=
%entero1%%decimales1% set line2=
%entero2%%decimales2% set /a RsTotal=
%line1% *
%line2% set "resultado=
%RsTotal:~0,-4%,
%RsTotal:~-4%"
:dividir
set /a Dividendo=
%entero1%%decimales1% set /a Divisor=
%entero2%%decimales2%
:tres
for /l
%%g in (%Dividendo%,-
%Divisor%,0
) do ( if "
%%g"
LSS "
%Divisor%"
(set Resto=
%%g ) ) for /l
%%h in (%Resto%0,-
%Divisor%,0
) do ( if "
%%h"
LSS "
%Divisor%"
(set Resto=
%%h0
) ) for /l
%%_
in (%Resto%,-
%Divisor%,0
) do ( if "
%%_"
LSS "
%Divisor%"
(set Resto=
%%_
) ) set resultado=0,
%cont:-=%%cont2:-=%%cont3:-=%
:cuatro
for /l
%%i in (%Dividendo%,-
%Divisor%,0
) do ( if "
%%i"
LSS "
%Divisor%"
(set Resto=
%%i0
) ) for /l
%%j in (%Resto%,-
%Divisor%,0
) do ( if "
%%j"
LSS "
%Divisor%"
(set Resto=
%%j0
) ) for /l
%%k in (%Resto%,-
%Divisor%,0
) do ( if "
%%k"
LSS "
%Divisor%"
(set Resto=
%%k) ) set resultado=
%cont%,
%cont2%%cont3%
Tambien, y derivado del float e creado otro code para realizar raices cuadradas decimales, tmb tiene error por redondeo pero menos es nada XD
Sintaxis:
:uno
set /a RefEntera=
%RefEntera% + 1
set /a BaseEntera=
%cont% *
%cont%
:dos
pushd "
%windir%\system32"
set /a RefDecimal=
%RefDecimal% + 1
for /f "tokens=*"
%%a in ('float.bat
%RefEntera%,
%cont3% *
%RefEntera%,
%cont3%'
) do (
Espero os resulte util o por lo menos curioso XD!!
Un saludo gente ^^