Visual Basic - Ayuda con decimales (VB6)

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 22 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Ayuda con decimales (VB6)

Publicado por Agustin (4 intervenciones) el 23/10/2019 02:30:17
Hola amigos, tengo un problema que me tiene agobiado, debo programar una aplicacion para una materia de la universidad, pero nunca en la vida vi algo de programacion (estudio quimica), y bueno a duras penas ya esto cerca de terminar la aplicacion que es un convertidor de unidades, solo me falta solucionar un problema con los decimales..
Cuando yo quiero convertir un numero con dos decimales, por ejemplo 12,56, necesito que la aplicacion me de como resultado el numero con 2 decimales, que es la cantidad de decimales que yo ingrese como numero a convertir. Si ingreso 1.1265 entonces necesito que el resultado tenga 4 decimales. Ahora el otro inconveniente que se presenta es al convertir por ejemplo 1 Joule a calorias.. 1 Joule equivale a 0,000239006.. Por lo tanto en mi aplicacion esta convercion me daria como resultado 0.. Porque no ingrese ningun decimal..

Alguien podria darme una mano con esto? Adjunto el codigo con los archivos necesarios para que funciones.
Gracias desde ya

https://drive.google.com/drive/folders/1-3D4gdmwL__34ZmO-AepQ9ocCRY4GxeZ?usp=sharing
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 355
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Ayuda con decimales (VB6)

Publicado por raul (160 intervenciones) el 23/10/2019 18:54:17
Veras VB la solución de tu problema es un poco compleja para explicar pero es mucho más facil de hacer.

1- Analiza que tu escribes una cadena de caracteres en un textbox 1.2345 ó 1,2345 y como vez existen controvercias en cuanto ha si empleas el punto o la coma.
2- El VB emplea la función VAL para convertir cadenas de caracteres en numeros DOUBLE, pero esta influenciada por WINDOWS o sea que si WINDOWS tiene declarado como separador decimal el punto y escribes val("1.2345") devuelbe 1.2345 pero si escriibes VAL("1,2345") devuelbe 1.
3- En ningun caso las funciones de conversión te deran la cantidad exacta de decimales que introduciste.

Como vez parece un caos, un rompecoco tamaño industrial. La solución es mas simple

1- Declara una variable a nivel de modulo
1
DIM DECIMAL as integer

2- Escribe la siguiente función

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Funcion XCONVERSE(NVAL as string) as double
Dim PENTERO as long, TEMP as integer,  PDOUBLE as double    '//Variables para descomponer la cadena e ingnorar los puntos y las comas
 
TEMP =0                '//Inicializarlas a cero
temp = strcomp(nval, ".", 1)          '//Averiguar posición del punto dentro de la cadena numerica
if temp =0 then
temp = strcomp(nval, ",", 1)          '//Averiguar posición de la coma dentro de la cadena numerica
end if
'// sea cual sea la forma de escritura ahora tenemos la posición dentro de la cadena de las comas o los puntos, ahora tambien es posible que el numero sea entero y nunca fue decimal
Decimal = len(Nval)-(temp+1)
if temp =0 then                            '// Precaución si es entero
xconverse = val(nval)
exit function
end if
 
pentero = val(left(Nval, dtemp))       '// obtener la parte entera de la cadena
Pdouble = val(right(nval, (len(Nval)-(temp+1))) '//Obtener la parte decimal pero como entero para que no falle nunca
pdouble = pdouble * (10 ^ decimal-1)                    '// ahora lo convertimos en double
 
XCONVERSE = PENTERO + PDOUBLE                '//Tenemos el numero exacto
 
end function

3- ahora cada vez que quieras usar el numero que escribiste en el textbox solo tienes que decir XCONVERSE(text1.text) y no tiene fallas y luego en cuanda vallas a utilizar el resultado de cualquier operación escribes round(resultado, decimal)

explicación la variable DECIMAL fue creada a nivel de modulo o sea que es visible desde cualquier procedimiento. Durante el uso de la funcion XCONVERSE fue guardada la cantidad exacta de decimales en la variable DECIMAL por lo que luego de hacer las restante operaciones que quieras puedes redondear a la cantidad exacta de decimales.

Cuando escribas este codigo sin los comentarios veras que es simple, la explicación es la que es compleja...
espero te funcione.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Ayuda con decimales (VB6)

Publicado por Andres Leonardo (1798 intervenciones) el 23/10/2019 18:59:37
Pues al resultado le mandas el numero de decimales que tenga el dato de ingreso

si en A2 esta el valor que ingresaste 12.56
(en B2 colocas esta formula
1
=LARGO(A2)-ENCONTRAR(".",A2) ' si tu separador es , colocas la , entre comillas
)

Ahora digamos que C2 esta el calculo procede con la formula redondear

1
=REDONDEAR(VALORCONVERSION,B2) ' donde B2 esta el numero de decimales

Espero te sirva

PD lo que se tenga que programar se programe pero si existe con formula no lo compliques.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 355
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Ayuda con decimales (VB6)

Publicado por raul (160 intervenciones) el 23/10/2019 20:11:27
Leo creo que está hablando de VB 6.0 no excel o al menos fue lo que entendí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Ayuda con decimales (VB6)

Publicado por Andres Leonardo (1798 intervenciones) el 23/10/2019 21:12:02
Estimado Raul Tienes toda la razon no se por que pero intercambie el foro jejjejej

Mil gracias por tu rectificacion

Siendo asi ,... pues toca hacerlo con programacion

Espero le sirva tu recomendacion si necesita algo mas lo revisamos

gracias nuevamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar