[Batch] Suma decimales

Iniciado por modubat, 15 Septiembre 2010, 20:55 PM

0 Miembros y 1 Visitante están viendo este tema.

modubat

Por las limitaciones del lenguaje batch no puede operar con numeros decimales, asi que nos las tenemos que ingeniar para poder usarlos
esto es una pequeña herramienta codeada por mi que nos permite sumar numeros, en principio iba ha hacer una calculadora pero es un proyecto que deje

les puede servir a mas de uno ;)



Uplo

Código (dos) [Seleccionar]

:: Suma decimales

:: By modubat

@ECHO OFF
(%comspec% /a /q /e:on /v:off /c "%~n$path:0") || EXIT/b
SET/p "num1=>"
echo. +
SET/p "num2=>"
CALL:SUMA "%num1%" "%num2%"
ECHO.
ECHO.RESULTADO: %res%
PAUSE>NUL
EXIT/B 1

:suma
SET/A COUNT=0
FOR %%A IN ("%~1" "%~2") DO IF "%%~A"=="" GOTO:EOF
SET "NUM1=%~1" & SET "NUM2=%~2" & SET "DEC1=0" & SET "DEC2=0"
ECHO.%NUM1% | FIND "." >NUL && FOR /F "TOKENS=1-2 DELIMS=." %%A IN ("%NUM1%") DO (SET "NUM1=%%A" & SET "DEC1=%%B")
ECHO.%NUM2% | FIND "." >NUL && FOR /F "TOKENS=1-2 DELIMS=." %%A IN ("%NUM2%") DO (SET "NUM2=%%A" & SET "DEC2=%%B")
CALL:LEN "%dec1%"
SET "l_dec1=%len%"
CALL:LEN "%dec2%"
SET "l_dec2=%len%"
SET/a"l_dec=l_dec1-l_dec2"
IF %l_dec% GTR 0 SET _var=true
IF %l_dec% LSS 0 SET _var=false
CALL:ABSOLUTE "%l_dec%"
SET "l_dec=%NUM%"
IF "%_var%"=="true" FOR /l %%a in (1 1 %l_dec%) do CALL SET dec2=%%dec2%%0
IF "%_var%"=="false" FOR /l %%a in (1 1 %l_dec%) do CALL SET dec1=%%dec1%%0
SET/a"grn=%dec1:~0,1%+%dec2:~0,1%"
IF "%grn%"==0 SET "dec1=1%dec1%" & SET "dec2=1%dec2%"
SET/a dec=dec1+dec2,num=num1+num2"
IF "%grn%"=="0" SET dec=%dec:~1%
CALL:LEN "%dec%"
IF "%_var%"=="true" IF ["%len%"] NEQ ["%l_dec1%"] SET dec=%dec:~1% & SET/a num+=1
IF "%_var%"=="false" IF ["%len%"] NEQ ["%l_dec2%"] SET dec=%dec:~1% & SET/a num+=1
IF "%_var%"=="" IF ["%len%"] NEQ ["%l_dec1%"] SET dec=%dec:~1% & SET /a num+=1
IF "%grn%"=="0" CALL :soub
SET res=%num%.%dec%
GOTO:EOF

:COMP
if %dec% GTR 0 (
set "comp1=1%~1"
set "comp2=%~2"
set/a comp=comp1-comp2
call set comp=%%comp:~1%%
) else (set/a "comp=%~1-%~2")
GOTO :EOF

:SOUB
SET "dec1=1%dec1%" & SET "dec2=1%dec2%"
SET/a dec=dec1+dec2
SET dec=%dec:~1%
GOTO :EOF

:REST
CALL:LEN %*
SET "tmpstring=%len%"
SET/a tmpstring-=1,rdn_=1
FOR /l %%i in (1 1 %tmpstring%) do CALL SET "rdn_=%%rdn_%%0"
GOTO :EOF

:LEN
IF "%~1"=="" GOTO:EOF
FOR /F "DELIMS=:" %%F IN ('^(ECHO.%~1^&ECHO.^) ^| FINDSTR /O .') DO SET/A LEN=%%F-3
GOTO :EOF

:ABSOLUTE
SET "NUM=%~1"
SET "NUM=%NUM:-=%
EXIT/B



saludos