Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: modubat en 15 Septiembre 2010, 20:55 pm



Título: [Batch] Suma decimales
Publicado por: modubat en 15 Septiembre 2010, 20:55 pm
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 ;)

(http://img186.imageshack.us/img186/8615/dibujoas.png) (http://img186.imageshack.us/i/dibujoas.png/)

Uplo

Código
  1. :: Suma decimales
  2.  
  3. :: By modubat
  4.  
  5. @ECHO OFF
  6. (%comspec% /a /q /e:on /v:off /c "%~n$path:0") || EXIT/b
  7. SET/p "num1=>"
  8. echo. +
  9. SET/p "num2=>"
  10. CALL:SUMA "%num1%" "%num2%"
  11. ECHO.RESULTADO: %res%
  12. PAUSE>NUL
  13. EXIT/B 1
  14.  
  15. :suma
  16. SET/A COUNT=0
  17. FOR %%A IN ("%~1" "%~2") DO IF "%%~A"=="" GOTO:EOF
  18. SET "NUM1=%~1" & SET "NUM2=%~2" & SET "DEC1=0" & SET "DEC2=0"
  19. ECHO.%NUM1% | FIND "." >NUL && FOR /F "TOKENS=1-2 DELIMS=." %%A IN ("%NUM1%") DO (SET "NUM1=%%A" & SET "DEC1=%%B")
  20. ECHO.%NUM2% | FIND "." >NUL && FOR /F "TOKENS=1-2 DELIMS=." %%A IN ("%NUM2%") DO (SET "NUM2=%%A" & SET "DEC2=%%B")
  21. CALL:LEN "%dec1%"
  22. SET "l_dec1=%len%"
  23. CALL:LEN "%dec2%"
  24. SET "l_dec2=%len%"
  25. SET/a"l_dec=l_dec1-l_dec2"
  26. IF %l_dec% GTR 0 SET _var=true
  27. IF %l_dec% LSS 0 SET _var=false
  28. CALL:ABSOLUTE "%l_dec%"
  29. SET "l_dec=%NUM%"
  30. IF "%_var%"=="true" FOR /l %%a in (1 1 %l_dec%) do CALL SET dec2=%%dec2%%0
  31. IF "%_var%"=="false" FOR /l %%a in (1 1 %l_dec%) do CALL SET dec1=%%dec1%%0
  32. SET/a"grn=%dec1:~0,1%+%dec2:~0,1%"
  33. IF "%grn%"==0 SET "dec1=1%dec1%" & SET "dec2=1%dec2%"
  34. SET/a dec=dec1+dec2,num=num1+num2"
  35. IF "%grn%"=="0" SET dec=%dec:~1%
  36. CALL:LEN "%dec%"
  37. IF "%_var%"=="true" IF ["%len%"] NEQ ["%l_dec1%"] SET dec=%dec:~1% & SET/a num+=1
  38. IF "%_var%"=="false" IF ["%len%"] NEQ ["%l_dec2%"] SET dec=%dec:~1% & SET/a num+=1
  39. IF "%_var%"=="" IF ["%len%"] NEQ ["%l_dec1%"] SET dec=%dec:~1% & SET /a num+=1
  40. IF "%grn%"=="0" CALL :soub
  41. SET res=%num%.%dec%
  42. GOTO:EOF
  43.  
  44. :COMP
  45. if %dec% GTR 0 (
  46. set "comp1=1%~1"
  47. set "comp2=%~2"
  48. set/a comp=comp1-comp2
  49. call set comp=%%comp:~1%%
  50. ) else (set/a "comp=%~1-%~2")
  51. GOTO :EOF
  52.  
  53. :SOUB
  54. SET "dec1=1%dec1%" & SET "dec2=1%dec2%"
  55. SET/a dec=dec1+dec2
  56. SET dec=%dec:~1%
  57. GOTO :EOF
  58.  
  59. :REST
  60. CALL:LEN %*
  61. SET "tmpstring=%len%"
  62. SET/a tmpstring-=1,rdn_=1
  63. FOR /l %%i in (1 1 %tmpstring%) do CALL SET "rdn_=%%rdn_%%0"
  64. GOTO :EOF
  65.  
  66. :LEN
  67. IF "%~1"=="" GOTO:EOF
  68. FOR /F "DELIMS=:" %%F IN ('^(ECHO.%~1^&ECHO.^) ^| FINDSTR /O .') DO SET/A LEN=%%F-3
  69. GOTO :EOF
  70.  
  71. :ABSOLUTE
  72. SET "NUM=%~1"
  73. SET "NUM=%NUM:-=%
  74.  
  75.  

saludos