Autor Tema: Convertir unidad a Pack  (Leído 7452 veces)

0 Usuarios y 1 Visitante están viendo este tema.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Convertir unidad a Pack
« en: Diciembre 18, 2012, 04:41:55 pm »
Necesito convertir de unidad a pack.

1 Pack = 12 unidades.

Código: (VB) [Seleccionar]
Private Sub Command1_Click()
   
    Dim xEntero As Integer
    Dim xUnidad As Integer

    xEntero = Format(Val(Text1.Text) / 12, "")
    xUnidad = Format(Val(Text1.Text), "") - xEntero * 12

    If xUnidad > 0 Then
        Debug.Print xEntero & " PACK CON " & xUnidad & " LATAS"
    Else
        Debug.Print xEntero & " PACK"
    End If

End Sub

En algunos casos no me convierte bien, por ejemplo si pongo 69 unidad me tira directo a 6 pack, y deberia de ser 5 pack con 9 latas.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Convertir unidad a Pack
« Respuesta #1 en: Diciembre 18, 2012, 05:09:03 pm »
El problema es que estas poniendo xEntero como Integer cuando 69/12 = 5.75
Código: (VB) [Seleccionar]
   Dim xEntero As Double
    Dim xUnidad As Integer

    xEntero = Fix((Val(Text1.Text)) / 12)
    xUnidad = (Val(Text1.Text) / 12 - xEntero) * 12

    If xUnidad > 0 Then
        Debug.Print xEntero & " PACK CON " & xUnidad & " LATAS"
    Else
        Debug.Print xEntero & " PACK"
    End If
« última modificación: Diciembre 18, 2012, 05:18:01 pm por YAcosta »
Me encuentras en YAcosta.com

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Convertir unidad a Pack
« Respuesta #2 en: Diciembre 18, 2012, 05:25:49 pm »
Así mismo amigo me equivoque ahí también lo resolví así:


Código: (VB) [Seleccionar]
Dim xEntero As Double
Dim xUnidad As Double
Dim xTotal As Double

Private Sub Command1_Click()

    xEntero = (Text1.Text) / 12
    xUnidad = Int(xEntero)
    xTotal = Int(Text1.Text) - (xUnidad) * 12
   
    If Text1.Text < 12 Then
        Me.Caption = Text1.Text & " LATAS"
    Else
       
        If xTotal > 0 Then
            Me.Caption = xUnidad & " PACK CON " & xTotal & " LATAS"
        Else
            Me.Caption = xUnidad & " PACK"
        End If
       
    End If
   
End Sub
« última modificación: Diciembre 18, 2012, 05:30:53 pm por E N T E R »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Convertir unidad a Pack
« Respuesta #3 en: Diciembre 18, 2012, 05:42:41 pm »
Creo que Fix redondea para arriba, por lo que si pones 23 latas, en ves de ponerte 1 pack con 11 latas, te pondria 2 packs.... (1.9 packs)

En realidad debe ser así

Código: (vb) [Seleccionar]
Const latasXpack As Integer = 12
Dim unidades As Integer, Packs As Integers, latasRestantes As Integer

Packs = Floor(unidades / latasXpack)
latasRestantes = unidades - Packs * latasXpack

Y listo :)

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Convertir unidad a Pack
« Respuesta #4 en: Diciembre 18, 2012, 07:30:57 pm »
Floor?

Código: (VB) [Seleccionar]
    Dim xNumero As Double
    Dim xCaja As Integer
    xNumero = Val(Text1.Text) 'Numero a comparar
    xCaja = 12 'Cantidad que contiene el PACK
    If xNumero < xCaja Then
        lblMen.Caption = xNumero & " LATAS"
    Else
        'Metodo 1-------------------------------------------
        Dim xEntero As Double
        Dim xDecimales As Double
        xEntero = Format((xNumero / xCaja), "####0.00")
        xDecimales = Format((xEntero - Int(xEntero)) * xCaja, "####0")
        xEntero = Int(xEntero)
       
        'Metodo 2-------------------------------------------
        'Dim xEntero As Integer
        'Dim xDecimales As Integer
        'xEntero = Int(xNumero / xCaja)
        'xDecimales = xNumero - (xEntero * xCaja)
       
        '---------------------------------------------------
        If xDecimales > 0 Then
            lblMen.Caption = xEntero & " PACK CON " & xDecimales & " LATAS"
        Else
            lblMen.Caption = xEntero & " PACK"
        End If
    End If
« última modificación: Diciembre 18, 2012, 07:33:09 pm por cristian_19a »

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Convertir unidad a Pack
« Respuesta #5 en: Diciembre 18, 2012, 08:04:04 pm »
Floor es una funcion que redondea hacia abajo, o sea, 3.5, 3.7, 3.9, 3.1 y así se redondea a 3....

No hay forma de que 23.9 latas te den 2 paquetes, es 1 paquete y 11.9 latas :P (una exageración, pero se entiende)

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Convertir unidad a Pack
« Respuesta #6 en: Diciembre 18, 2012, 10:31:24 pm »
La verdad tambien me sono a que Vb no tenia esa funcion. investigando encontre esto.

Ceiling y Floor en VB6
Dado que Visual Basic 6 carece de estos dos métodos que en algún momento pueden resultar útiles. Una forma de obtener el resultado deseado es con dos pequeñas funciones.

'Devuelve el entero más pequeño no menor que X.
'Ejemplo: Ceiling(1.23) = 2, Ceiling(-1.23) = -1

Código: (VB) [Seleccionar]
Private Function Ceiling(ByVal X As Double) As Long
   Ceiling = -Int(X * (-1))
End Function

'Devuelve el entero más grande no mayor que X.
'Ejemplo: Floor(1.23) = 1, Floor(-1.23) = -2

Código: (VB) [Seleccionar]
Private Function Floor(ByVal X As Double) As Long
   Floor = (-Int(X) * (-1))
End Function

Pero gracias por todo y a todos por colaborar, ya lo resolvi.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Convertir unidad a Pack
« Respuesta #7 en: Diciembre 19, 2012, 01:49:18 am »
Creo que Fix redondea para arriba, por lo que si pones 23 latas, en ves de ponerte 1 pack con 11 latas, te pondria 2 packs.... (1.9 packs)

En realidad debe ser así....


No mi estimado, el codigo que puse es correcto, con 23 latas o cualquier cantidad de latas me da el resultado esperado, fijate:

[youtube]http://www.youtube.com/watch?v=6MvwOejs9WQ[/youtube]

Poner en HD debes!!!  Salud
« última modificación: Diciembre 19, 2012, 01:50:51 am por YAcosta »
Me encuentras en YAcosta.com

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Convertir unidad a Pack
« Respuesta #8 en: Diciembre 19, 2012, 04:19:03 am »
esta forma creo que tambien es valida

Código: [Seleccionar]
    xEntero = Val(Text1.Text) \ 12
    xUnidad = Val(Text1.Text) Mod 12

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Convertir unidad a Pack
« Respuesta #9 en: Diciembre 19, 2012, 04:25:45 am »
Esa es mas limpia, cambiar de:
Código: (VB) [Seleccionar]
xEntero = Fix((Val(Text1.Text)) / 12)
xUnidad = (Val(Text1.Text) / 12 - xEntero) * 12

a

Código: (VB) [Seleccionar]
xEntero = Fix((Val(Text1.Text)) / 12)
xUnidad = Val(Text1.Text) Mod 12
« última modificación: Diciembre 19, 2012, 04:27:42 am por YAcosta »
Me encuentras en YAcosta.com

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:Convertir unidad a Pack
« Respuesta #10 en: Diciembre 19, 2012, 02:05:18 pm »
Código: [Seleccionar]
xEntero = Val(Text1.Text) \ 12 '<--Parte entera
xUnidad = Val(Text1.Text) Mod 12'<--Resto

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Convertir unidad a Pack
« Respuesta #11 en: Diciembre 19, 2012, 02:13:30 pm »
Código: [Seleccionar]
xEntero = Val(Text1.Text) \ 12 '<--Parte entera
xUnidad = Val(Text1.Text) Mod 12'<--Resto

Ya me di cuenta!!!! no sabia eso realmente. Pense que era un error pero comprobé que efectivamente funciona, y el truco esta en usar \ en vez de /. A pesar de que funciona bien con Fix, no es necesario usarlo.
Me encuentras en YAcosta.com