Título: [Com] float v2 (Suma,resta,multiplicacion y division decimal)
Publicado por: LauBuru en 4 Julio 2010, 12:18 pm
En esta segunda version e ampliado el comando hasta las cuatro acciones aritmeticas basicas (Sumar, restar, multiplicar y dividir) con numeros reales, quiero avisar antes de que se me hechen al cuello de que el segundo decimal no suele ser totalmente exacto hay una variacion respecto a una calculadora, esto se deve a que CMD tiende a redondear los resultados cuando la operacion no devuelve un numero entero por lo demas va medianamente bien, os dejo el codigo para que le hecheis un vistazo. Sintaxis: float xx,yy + xx,yy float xx,yy - xx,yy float xx,yy * xx,yy float xx,yy / xx,yy
for /f "tokens=*" %%a in (' set /a "operando1= %1, %2"' ) do ( set decimales1= %%a) for /f "tokens=*" %%b in (' set /a "operando2= %4, %5"' ) do (set decimales2= %%b) if " ^%operador %s" == " ^+s" (goto sumar ) if " ^%operador %s" == " ^-s" (goto restar ) if " ^%operador %s" == " ^*s" (goto multiplicar ) if " ^%operador %s" == " ^/s" (goto dividir ) :sumar set /a RsEntero= %entero1% %operador% %entero2% set /a RsDecimal= %decimales1% %operador% %decimales2% if "100" GEQ " %RsDecimal%" (set /a "RsEntero= %RsEntero% + %RsDecimal:~0,1%" ) set "resultado= %RsEntero%, %RsDecimal%" :restar set /a RsEntero= %entero1% %operador% %entero2% set /a RsDecimal= %decimales1% %operador% %decimales2% if " %decimales1%" LSS " %decimales2%" (set "decimales1=1 %decimales1%" & set /a "entero1= %entero1%-1" & goto uno ) if " %decimales2%" LSS " %decimales1%" (set "decimales2=1 %decimales2%" & set /a "entero2= %entero2%-1" & goto dos ) :uno set /a RsDecimal= %decimales1%- %decimales2% set /a RsEntero= %entero2%%operador%%entero1% set resultado= %RsEntero%, %RsDecimal% :dos set /a RsDecimal= %decimales2%- %decimales1% set /a RsEntero= %entero2%%operador%%entero1% set resultado=- %RsEntero%, %RsDecimal% :multiplicar set /a RsEntero= %entero1% %operador% %entero2% set /a RsDecimal= %decimales1% %operador% %decimales2% set line1= %entero1%%decimales1% set line2= %entero2%%decimales2% set /a RsTotal= %line1% * %line2% set "resultado= %RsTotal:~0,-4%, %RsTotal:~-4%" :dividir set /a Dividendo= %entero1%%decimales1% set /a Divisor= %entero2%%decimales2% :tres for /l %%g in (%Dividendo%,- %Divisor%,0 ) do ( if " %%g" LSS " %Divisor%" (set Resto= %%g ) ) for /l %%h in (%Resto%0,- %Divisor%,0 ) do ( if " %%h" LSS " %Divisor%" (set Resto= %%h0 ) ) for /l %%_ in (%Resto%,- %Divisor%,0 ) do ( if " %%_" LSS " %Divisor%" (set Resto= %%_ ) ) set resultado=0, %cont:-=%%cont2:-=%%cont3:-=% :cuatro for /l %%i in (%Dividendo%,- %Divisor%,0 ) do ( if " %%i" LSS " %Divisor%" (set Resto= %%i0 ) ) for /l %%j in (%Resto%,- %Divisor%,0 ) do ( if " %%j" LSS " %Divisor%" (set Resto= %%j0 ) ) for /l %%k in (%Resto%,- %Divisor%,0 ) do ( if " %%k" LSS " %Divisor%" (set Resto= %%k) ) set resultado= %cont%, %cont2%%cont3%
Tambien, y derivado del float e creado otro code para realizar raices cuadradas decimales, tmb tiene error por redondeo pero menos es nada XD Sintaxis: :uno set /a RefEntera= %RefEntera% + 1 set /a BaseEntera= %cont% * %cont% :dos pushd " %windir%\system32" set /a RefDecimal= %RefDecimal% + 1 for /f "tokens=*" %%a in ('float.bat %RefEntera%, %cont3% * %RefEntera%, %cont3%' ) do (
Espero os resulte util o por lo menos curioso XD!! Un saludo gente ^^
Título: Re: [Com] float v2 (Suma,resta,multiplicacion y division decimal)
Publicado por: leogtz en 4 Julio 2010, 20:31 pm
No lo he probado, no he estado en Windows :s, algunas dudas sobre la división, con ¿cuantos números decimales puede trabajar?
Recomendaría que le dieras una indentación a tu código.
Saludos.
Título: Re: [Com] float v2 (Suma,resta,multiplicacion y division decimal)
Publicado por: Debci en 4 Julio 2010, 20:55 pm
Que significa la Tag [Com] del titulo?
Saludos
Título: Re: [Com] float v2 (Suma,resta,multiplicacion y division decimal)
Publicado por: LauBuru en 4 Julio 2010, 22:11 pm
Lo de [Com] lo puse por [Comando] intentando abreviar (haunque no fue muy acertado).
El script trabaja entre dos y cuatro decimales suele ir variando pero en las divisiones por ejemplo se podrian añadir mas decimales si volvieramos a hacer un ciclo "for /l" con el resto que quedara, en un principio lo tenia pensado para trabajar con dos decimales pero a menudo devuelve mas de dos haunque si haces la operacion con la calculadora veras que a partir del segundo decimal suele haber error por el redondeo.
Sep lo indentare para que sea mas legible XD!! perdon
|