[BATCH] CALC: Sumas y restas con decimales

Iniciado por Binary_Death, 23 Julio 2012, 02:33 AM

0 Miembros y 2 Visitantes están viendo este tema.

Binary_Death

Aquí dejo una función que es capaz de sumar y restar infinitos términos con tantos decimales como permita la cmd, usando sólo batch.

Dedicada a AgnesBlack, que tenía una duda con esto se ve.


@Echo Off
more/c<nul
call :_calc sub "12.72-8.189605-1.0025" "adt"
call :_calc add "%adt%+521.27+5" "adt"
echo: 12.72 - 8.189605 - 1.0025 + 521.27 + 5 = %adt%
pause 1>nul
exit
:_calc
setlocal enabledelayedexpansion
if "%~1" EQU "add" set "sym=+"
if "%~1" EQU "sub" set "sym=-"
set "add_str=%~2"
set "add_str=!add_str:%sym%= !"
set/a hst=0,cnt=0,add=0
for %%_ in (%add_str%) do (
set/a dec[!cnt!]=0
for /f "tokens=2 delims=." %%. in ("%%_") do (
call :_strlen "%%."
set/a dec[!cnt!]=!errorlevel!
if !errorlevel! GTR !hst! set/a hst=!errorlevel!
)
set/a cnt+=1
)
set/a cnt=0
if "%sym%" EQU "-" for %%_ in (%add_str:.=%) do (
set/a pow=%hst%-%dec[0]%,n_b=%%_
for /l %%. in (1,1,!pow!) do set "n_b=!n_b!0"
set/a add+=!n_b!*2
goto :__op
)
:__op
for %%_ in (%add_str:.=%) do (
call set/a pow=%hst%-%%dec[!cnt!]%%,n_b=%%_
for /l %%. in (1,1,!pow!) do set "n_b=!n_b!0"
set/a add%sym%=!n_b!,cnt+=1
)
set "res=!add:~0,-%hst%!.!add:~-%hst%!"
if %hst% EQU 0 set "res=%res:~1%"
endlocal & set "%~3=%res%" & exit /b
:_strlen
setlocal
set/a cnt=0
for /f "tokens=* eol=" %%_ in (
'"cmd /u /c echo:%~1|more"'
) do set/a cnt+=1
endlocal & exit /b %cnt%


¡Un saludo!

AgnesBlack

genial wuau una duda hay en la parte de

call :_calc sub "12.72-8.189605-1.0025" "adt"
call :_calc add "%adt%+521.27" "adt"


podria poner

echo ingrese primer numero
set  /p a=
echo ingrese segundo numero
set /p b=

call :_cal sub "a-b" "adt"


hmm no entiendo muy bien el procedimiento pero como generaria dependiendo un numero dado?

Binary_Death

Llamas a la función así:


call :_calc add|sub "operación" "variable"


Donde variable será donde se guarde el resultado.
Luego, al hacer:


echo. %variable%


Se te imprimirá en pantalla el resultado.

Por supuesto puedes hacer esto:


@echo off
echo ingrese primer numero
set  /p "a="
echo ingrese segundo numero
set /p "b="
call :_calc sub "%a%-%b%" "adt"
echo. Resultado de la resta: %adt%
pause > nul
exit



AgnesBlack

bien gracias ya intentare probar y ver si me sale algo para la division gracias :D


AgnesBlack

genial :D ya posteare los avanze que hice en bath claro son todos ejercicios matematicos hmmm mira tengo una duda viste el codigo que me pasaste? bueno me sale un error al ejecutarlo me dice

Citar"El sistema no  encuentra la etiqueta por lotes especificada: _calc
   Resultado de la resta:

:D ya voy entendiendo mas el tema de bath hmm se puede hacer matrices en ella no?? vi en un pdf la explicacion de como insertar decimales en una matris en bath pero no se donde guarde el pdf pero esta interesante