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!
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?
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
bien gracias ya intentare probar y ver si me sale algo para la division gracias :D
Código optimizado ;)
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