Hola a todos.
Cuando ejecuto lo siguiente:
if -2233333333 LSS 10 echo menor que diez
debería salir "menor que diez", pero no lo ve como menor, ¿por que pasa esto y como arreglarlo?
Intenta poner ese numero negativo en una variable: set /a var=-223333333 y luego si haces if %var% LSS 10 (echo menor que diez)
Me dices, tendria que funcionar :P
Cita de: $Edu$ en 23 Diciembre 2012, 22:21 PM
Intenta poner ese numero negativo en una variable: set /a var=-223333333 y luego si haces if %var% LSS 10 (echo menor que diez)
Me dices, tendria que funcionar :P
Gracias, pero sale esto:
CitarNúmero no válido. Los números están limitados a 32 bits de precisión.
Cierto, porque batch tiene un limite, pero puedes capturar el numero que quieras en varias partes y hacer algo para que te funcione de todas formas, pero bueno, yo eligiria otro lenguaje para programar xD
Ok, creo que vbs no tiene ese problema.
Gracias $Edu$
Te voy a mostrar la diferencia.
Limite Batch:
if -999999999 LSS 10 (
Echo Es menor que 10
)
* 9 dígitos
Límite VBS:
if -99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 < 10 then
Wscript.Echo "Menor que 10"
End If
* 308 dígitos
Límite Ruby:
If -999...(Así hasta más de UN MILLÓN DE DIGITOS) < 10
print "Es menor de 10"
end
PD: Ruby no tiene límite alguno porque convierte los enteros.
Límite python:
* Lo mismo que Ruby.
Saludos.
Muchas gracias EleKtro H@cker.
Una vez me tuve que enfrentar a ese problema. Me jodió bastante, sí.
Resulta que hice una función un poco engorrosa que te puede servir:
:_hst
setlocal enabledelayedexpansion
call :_strlen "%~1" & set/a n[0]=!errorlevel!
call :_strlen "%~2" & set/a n[1]=!errorlevel!
if %n[0]% EQU %n[1]% set "s_0=%~1" & set "s_1=%~2" & goto :_endhst
set/a hst=0,nhst=1
if %n[1]% GTR !n[%hst%]! set/a hst=1,nhst=0
set/a l_0=!n[%hst%]!-!n[%nhst%]!
shift/0 & call set s_0=%%~%hst% & call set s_1=%%~%nhst%
for /l %%_ in (1,1,%l_0%) do call set "s_1=0!s_1!"
:_endhst
for /f %%_ in ('"(echo:%s_0%&echo:%s_1%)|sort"') do set "hst=%%_"
endlocal & set "hst=%hst: =%" & 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%
Como puedes ver, recibe dos parámetros (los dos números) y devuelve en la variable "hst" el mayor.
Suerte, y tómatelo con calma, que ya te digo que es un poco engorrosa pero por lo menos funciona con los dígitos que sea necesario ;)
Cita de: Binary_Death en 24 Diciembre 2012, 19:18 PM
Una vez me tuve que enfrentar a ese problema. Me jodió bastante, sí.
Resulta que hice una función un poco engorrosa que te puede servir:
:_hst
setlocal enabledelayedexpansion
call :_strlen "%~1" & set/a n[0]=!errorlevel!
call :_strlen "%~2" & set/a n[1]=!errorlevel!
if %n[0]% EQU %n[1]% set "s_0=%~1" & set "s_1=%~2" & goto :_endhst
set/a hst=0,nhst=1
if %n[1]% GTR !n[%hst%]! set/a hst=1,nhst=0
set/a l_0=!n[%hst%]!-!n[%nhst%]!
shift/0 & call set s_0=%%~%hst% & call set s_1=%%~%nhst%
for /l %%_ in (1,1,%l_0%) do call set "s_1=0!s_1!"
:_endhst
for /f %%_ in ('"(echo:%s_0%&echo:%s_1%)|sort"') do set "hst=%%_"
endlocal & set "hst=%hst: =%" & 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%
Como puedes ver, recibe dos parámetros (los dos números) y devuelve en la variable "hst" el mayor.
Suerte, y tómatelo con calma, que ya te digo que es un poco engorrosa pero por lo menos funciona con los dígitos que sea necesario ;)
:o :o Wow, Gracias
Binary_Death, la subrutina esta algo complicada, la analizare con cuidado.
Cualquier duda me dices :)