Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: frankiani en 28 Junio 2009, 23:11 pm



Título: [MOD] Declarar variable parar dividir parte entera y real
Publicado por: frankiani en 28 Junio 2009, 23:11 pm
Estoy haciendo un programita para ayudarme en la seleccion de correas en V, voy bastante bien hasta el momento. Mi problema surge cuando al dividir dos numeros (un entero entre un numero real), el visual solo me toma la parte entera del numero real, me esta volviendo loco, declare a la variable que contiene el numero entero como single, ya que a veces puede tomar numeros decimales, y declare a la variable que tiene el numero real como single tambien. Ayuda por favor.


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 28 Junio 2009, 23:13 pm
¿Qué pasa si le pones double a ambas?


Título: Re: Ayuda, urgente! por favor
Publicado por: frankiani en 28 Junio 2009, 23:24 pm
lo mismo..


Título: Re: Ayuda, urgente! por favor
Publicado por: BlackZeroX en 28 Junio 2009, 23:28 pm
Ami me paso algo similar cuando hacia un algoritmo de resolucion de ecuaciones (1,2, y 3er grado) solo que se situaba en un problema con puntos decimales, solo declare las variables con global (En lugar de Public u otro en alguna otra parte) en un modulo X, ojala sea algo similar.¡!

Código
  1. global variable as double
  2.  
  3.  

P.D.: Es mas facil ayudarte si pones la parte de tu source, y por consiguiente detectar el Problema 'X'¡!


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 28 Junio 2009, 23:29 pm
Exacto...
Mmm... BlackZeroX... no utilizo muy seguido vb... pero existen los castings?


Título: Re: Ayuda, urgente! por favor
Publicado por: frankiani en 29 Junio 2009, 00:05 am
Ok, aca coloco el segmento que no me funciona, quite las declaraciones!! para no pasar pena aqui jajaja bueno, la cosa es que el valor donde esta guardado Ha, por ejemplo, es 4,878.. y en las operaciones solo toma el 4, el valor de Hd generalmente es un entero...

Private Sub cmdNb_Click()

Hd = Val(lblHd.Caption)
Ha = Val(lblHa.Caption)

If lblHa.Caption = "" Then
MsgBox "No se ha calculado el valor de la potencia nominal tabulada por banda", vbExclamation, "Advertencia"
ElseIf lblHd.Caption = "" Then
MsgBox "No se ha calculado el valor de la potencia de diseño", vbExclamation, "Advertencia"
ElseIf (Hd Mod Ha) = 0 Then
Nb = (Hd / Ha)
lblNb.Caption = Nb
Else
Nb = (Hd \ Ha)+1
lblNb.Caption = Nb
End If

End Sub


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 29 Junio 2009, 00:11 am
La variable Nb que tipo es?


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 29 Junio 2009, 00:19 am
Mira esto funciona correctamente...

Código
  1. Dim num1 As Single
  2. Dim num2 As Single
  3. Dim res As Single
  4.  
  5. Private Sub Command1_Click()
  6. num1 = Val(Text1.Text)
  7. num2 = Val(Text2.Text)
  8. If num2 <> 0 Then
  9.    res = num1 / num2
  10. Else
  11.    MsgBox "Division por cero"
  12. End If
  13. Text3.Text = res
  14. End Sub
  15.  
  16. Private Sub Form_Load()
  17. Text1.Text = ""
  18. Text2.Text = ""
  19. Text3.Text = ""
  20. End Sub


Título: Re: Ayuda, urgente! por favor
Publicado por: frankiani en 29 Junio 2009, 00:33 am
No entiendo tu post Fsend, no creo que estes claro en lo que quiero hacer, quiero saber porque solo se me toma la parte entera de la variable Ha, la variable Nd no me importa como se, porque segun el codigo siempre debe ser entero, igualmente pudiera declararla como entero, pero no se como funciona eso..


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 29 Junio 2009, 00:45 am
Mmmm creo que entiendo...

mira

Código
  1. dim num as single
  2. num=label1.caption

Fijate si te funciona así


Título: Re: Ayuda, urgente! por favor
Publicado por: frankiani en 29 Junio 2009, 01:08 am
Me has salvado la vida jajaja asi si me funciono, pero no entiendo porque no funcionaba con la linea

Ha=val(lblHa.caption)

Seria interesante saber porque..


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 29 Junio 2009, 01:11 am
De nada.
La función  val, devuelve el valor numérico de un string. Me imaginaría que la propiedad .caption en los labels no serán un string.
Ya investigaré mas del tema.


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 29 Junio 2009, 01:25 am
Que raro...

MSDN:

The Caption property is a string expression that can contain up to 2,048 characters.

 :-\


Título: Re: Ayuda, urgente! por favor
Publicado por: Karcrack en 29 Junio 2009, 02:03 am
VB es tiene un compilador muy inteligente... que lo que hace es que si tu no le indicas el tipo de variable usa por defecto un Variant...

Asi que recordad siempre usar Option Explicit y declarar vuestras variables con tipo!


PD: Me ha quedado tipo anuncion no? jaja :xD :xD

Buenas Noches ;D


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 29 Junio 2009, 02:08 am
Citar
PD: Me ha quedado tipo anuncion no? jaja
Si  :xD

Karcrack tu eres avanzado en VB.

¿Por qué es diferente?

Código
  1. dim num as single
  2. dim num2 as single
  3. num=val(text1.text) ' Devuelve el numero con decimales
  4. num2=val(label1.caption) ' Devuelve la parte entera

En el caso anterior se puede hacer que devuelva el número en sí?

Código
  1. dim num as single
  2. dim num2 as single
  3. num=val(text1.text) ' Devuelve el numero con decimales
  4. num2=label1.caption ' Devuelve el numero con decimales



Título: Re: Ayuda, urgente! por favor
Publicado por: frankiani en 30 Junio 2009, 11:41 am
Perfecto, mi programa quedo excelente :) gracias a todos por su ayuda! cuando termine de perfeccionar mi programa lo aporto a la comunidad, por si hay algun ingeniero por aca  :P


Título: Re: Ayuda, urgente! por favor
Publicado por: Karcrack en 30 Junio 2009, 12:35 pm
Citar
PD: Me ha quedado tipo anuncion no? jaja
Si  :xD

Karcrack tu eres avanzado en VB.

¿Por qué es diferente?

Código
  1. dim num as single
  2. dim num2 as single
  3. num=val(text1.text) ' Devuelve el numero con decimales
  4. num2=val(label1.caption) ' Devuelve la parte entera

En el caso anterior se puede hacer que devuelva el número en sí?

Código
  1. dim num as single
  2. dim num2 as single
  3. num=val(text1.text) ' Devuelve el numero con decimales
  4. num2=label1.caption ' Devuelve el numero con decimales

Código:
num2=val(label1.caption) ' Devuelve la parte entera
Eso no es cierto.... a mi me devuelve con decimales incluidos.... comprueba que pones el numero de esta forma n.##


Título: Re: Ayuda, urgente! por favor
Publicado por: h0oke en 30 Junio 2009, 20:17 pm
Karcrack tienes razón. En realidad caption lee correctamente el valor. La verdad no se porque a el no le funcionará, recién lo he probado y rula bien.

Gracias Karcrack.


Título: Re: [MOD] Declarar variable parar dividir parte entera y real
Publicado por: frankiani en 3 Julio 2009, 02:29 am
como hago para que los numeros sean leidos como #.##?? porque en la expresion que se imprime en el label, viene de otro label, cuyo resultado se ve expresado como #,## :S


Título: Re: [MOD] Declarar variable parar dividir parte entera y real
Publicado por: VonN en 3 Julio 2009, 02:50 am
Podrías comparar el string y buscar el "." y cambiarlo por una ",".


Título: Re: [MOD] Declarar variable parar dividir parte entera y real
Publicado por: Karcrack en 3 Julio 2009, 15:17 pm
como hago para que los numeros sean leidos como #.##?? porque en la expresion que se imprime en el label, viene de otro label, cuyo resultado se ve expresado como #,## :S

Revisate esta funcion, es muy interesante ;D ;D ;D

Código
  1. Format()

Código:
http://www.vb6.us/tutorials/understanding-vb-format-function-custom-numeric-formats
http://msdn.microsoft.com/es-es/library/59bz1f0h(VS.80).aspx

Saludos ;D