Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: SγиtαxEяяoя en 13 Junio 2013, 20:40 PM

Título: Sumar dos Textbox
Publicado por: SγиtαxEяяoя en 13 Junio 2013, 20:40 PM
Estoy intentando hacer esto

Código (vbnet) [Seleccionar]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text)
   End Sub


(http://i.imm.io/19eOC.png)

Pero cuando sumo de esta forma  8.000 + 2.000 = 10

(http://i.imm.io/19ePQ.png)

lo que quiero es que al sumar este separa las unidades

(http://i.imm.io/19eT7.png)
Título: Re: Sumar dos Textbox
Publicado por: SγиtαxEяяoя en 13 Junio 2013, 20:45 PM
Encontre algo como esto

CitarPrivate Sub cmdactualizar_Click()
'total = Val(valor1) + Val(valor2) + Val(valor3) + Val(valor4) + Val(valor5) + Val(valor6) + Val(valor7) + Val(valor8)

'valor1 = Mid(txtpeajescelco, 2, Len(txtpeajescelco)) ' captamos el valor de txt1 a partir de "$"
'valor2 = Mid(txtpeajesotros, 2, Len(txtpeajesotros)) ' captamos el valor de txt2 a partir de "$"

'valor1 = Replace(valor1, ",", "") ' borramos las comas de valor1
'valor2 = Replace(valor2, ",", "") ' borramos las comas de valor 2

total = Val(valor1) + Val(valor2)
'txttotal = Format(total, "#,#0.00")

txttotal.Text = Format(total, "#,##0.00")
'no importa que aparezca el signo de dinero "$#,##0.00"
End Sub

Private Sub txtpeajescelco_Change()
valor1 = Format(txtpeajescelco.Text, "#,#0.00")
End Sub

Private Sub txtpeajescelco_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
valor1 = Format(txtpeajescelco.Text, "#,#0.00")
txtpeajescelco.Text = valor1
End If
End Sub

Private Sub txtpeajescelco_LostFocus()
valor1 = Format(txtpeajescelco.Text, "#,#0.00")
txtpeajescelco.Text = valor1
End Sub

Private Sub txtpeajesotros_Change()
valor2 = Format(txtpeajesotros.Text, "#,#0.00")
End Sub

Private Sub txtpeajesotros_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
valor2 = Format(txtpeajesotros.Text, "#,#0.00")
txtpeajesotros.Text = valor2
End If
End Sub

Private Sub txtpeajesotros_LostFocus()
valor2 = Format(txtpeajesotros.Text, "#,#0.00")' no importa el signo dinero
txtpeajesotros.Text = valor2
End Sub
Bueno en tiempo de ejecucion ingreso los datos en las respectivas cajas de texto me aparece asi:
text1
1.000,00
text2
1.000,00
pero en la suma
aparece
2,00
no suma los valores después del punto, o sea toma por defecto los valores en unidad...
Título: Re: Sumar dos Textbox
Publicado por: Saberuneko en 13 Junio 2013, 20:45 PM
Creo que lo que te ocurre es que está tomándose el punto como una coma, interpretando tus números como 8+2.

Para poder meter de por medio los puntos, supongo que tendrías que trabajar con cadenas...

No recuerdo muy bien como tiraba todo ahora mismo, así que no sé decirte ahora mismo...
Título: Re: Sumar dos Textbox
Publicado por: Eleкtro en 13 Junio 2013, 20:58 PM
Como te han dicho, ese es el problema.

Al formatear el número se convierte a decimal, y los ceros a la derecha de la coma se eliminan,
Es decir, cuando escribes "2.000", se formatea a "2,000", y eso se representa como un "2" al ser Entero, y eso es lo que sumas, el "2".

¿Verdad que si escribes en los textboxes "2.001" si que te funciona corréctamente?

En fin debes manejar los tipos de números "Double" al sumar ese tipo de números:

Código (vbnet) [Seleccionar]
TextBox3.Text = FormatNumber(Convert.ToDouble(TextBox1.Text) + Convert.ToDouble(TextBox2.Text), TriState.False)

PD: Primero debes detectar si el string contiene puntos o comas para manejar el resto de números como "Long" (aka Int64) :)

Saludos.


EDITO:

No es perfecto, si intentas sumar "2.00" se reconoce como "200", pero bueno, solo es para mostrarte, eso ya lo mejoras tú...

Código (vbnet) [Seleccionar]
Public Class Form1

    Dim num1 As Object
    Dim num2 As Object

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        If sender.Text.Contains(".") Then _
             num1 = Convert.ToDouble(sender.Text) _
        Else num1 = Convert.ToInt64(sender.Text)
    End Sub

    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
        If sender.Text.Contains(".") Then _
             num2 = Convert.ToDouble(sender.Text) _
        Else num2 = Convert.ToInt64(sender.Text)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox3.Text = FormatNumber(num1 + num2, TriState.False)
    End Sub

End Class
Título: Re: Sumar dos Textbox
Publicado por: SγиtαxEяяoя en 13 Junio 2013, 21:47 PM
Este funciono a la perfeccion

Código (vbnet) [Seleccionar]
TextBox3.Text = FormatNumber(Convert.ToDouble(TextBox1.Text) + Convert.ToDouble(TextBox2.Text), TriState.False)

y si lo quiero pasar a un decimal debo usar de esta manera

Código (vbnet) [Seleccionar]
Public Sub Convert_Decimal(ByVal decimalVal As Decimal)

       Dim doubleVal As Double

       doubleVal = System.Convert.ToDouble(decimalVal)
End Sub


Código (vbnet) [Seleccionar]
Dim num1 As Double = 2000
Dim num2 As Double = 500
Dim sum As Double = num1 + num2

MsgBox(sum.ToString("0.00"))


Título: Re: Sumar dos Textbox
Publicado por: z3nth10n en 14 Junio 2013, 07:43 AM
Y no es tan sencillo como:

Código (vbnet) [Seleccionar]
Dim textbox1 As String = textbox1.text
Dim textbox2 As String = textbox2.text
Dim resultado As Integer = textbox1 + textbox2


no?

No lo he probado pero se suponeq eu tiene que funcionar. :P

Un saludo.

PD: No había leido el formato numérico. :P

Encontre esto por ahí:

Código (vbnet) [Seleccionar]
Format(cantidad, "##,##0.00″)
cantidad.ToString("##,##0.00″)


Aunque bueno si está resuelto, pos ná. :P
Título: Re: Sumar dos Textbox
Publicado por: Eleкtro en 14 Junio 2013, 07:52 AM
Cita de: Ikillnukes en 14 Junio 2013, 07:43 AM
Y no es tan sencillo como:

Código (vbnet) [Seleccionar]
Dim textbox1 As String = textbox1.text
Dim textbox2 As String = textbox2.text
Dim resultado As Integer = textbox1 + textbox2


no?

No, por esta razón:
Cita de: EleKtro H@cker en 13 Junio 2013, 20:58 PMEs decir, cuando escribes "2.000", se formatea a "2,000", y eso se representa como un "2" al ser Entero, y eso es lo que sumas, el "2".

Si lo declaras como entero se eliminan los ceros de la derecha, y "2.000" pasa a ser un simple "2".
Título: Re: Sumar dos Textbox
Publicado por: z3nth10n en 14 Junio 2013, 07:53 AM
Anda xD Pues ale, cada día se aprende algo nuevo no? :P

Syntax, pues ponle un Double tal como tenías. :P
Título: Re: Sumar dos Textbox
Publicado por: SγиtαxEяяoя en 14 Junio 2013, 07:54 AM
Cita de: Ikillnukes en 14 Junio 2013, 07:53 AM
Anda xD Pues ale, cada día se aprende algo nuevo no? :P

Syntax, pues ponle un Double tal como tenías. :P

Creo que se me olvido decir, QUE YA ESTA RESUELTO...
Título: Re: Sumar dos Textbox
Publicado por: z3nth10n en 14 Junio 2013, 07:55 AM
Cita de: SγиtαxEяяoя en 14 Junio 2013, 07:54 AM
Creo que se me olvido decir, QUE YA ESTA RESUELTO...


JOSJOSJOS!

CitarAunque bueno si está resuelto, pos ná. :P

Capichi? xD Encima to que quiero ayudar, que borde.... :P
Título: Re: Sumar dos Textbox
Publicado por: SγиtαxEяяoя en 14 Junio 2013, 07:59 AM
Cita de: Ikillnukes en 14 Junio 2013, 07:55 AM
JOSJOSJOS!

Capichi? xD Encima to que quiero ayudar, que borde.... :P

Si, muchas gracias?

Oye electro que opinas

Código (vbnet) [Seleccionar]
Dim value As Double

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       value = TextBox1.Text
       TextBox2.Text = (value.ToString("###,###,###,###"))
   End Sub
Título: Re: Sumar dos Textbox
Publicado por: Eleкtro en 14 Junio 2013, 08:20 AM
Cita de: SγиtαxEяяoя en 14 Junio 2013, 07:59 AM
Si, muchas gracias?

Oye electro que opinas

Código (vbnet) [Seleccionar]
Dim value As Double

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       value = TextBox1.Text
       TextBox2.Text = (value.ToString("###,###,###,###"))
   End Sub


Para formatear un número está muy bien...si esa es tu intención, pero para sumar no, no puedes sumar strings, y se concatenan en lugar de sumarse.

prueba así:

Código (vbnet) [Seleccionar]
Public Class Form1

   Public Property n1() As Double
       Get
           Return TextBox1.Text
       End Get
       Set(ByVal value As Double)
           TextBox1.Text = value.ToString("###,###,###,###")
       End Set
   End Property

   Public Property n2() As Double
       Get
           Return TextBox2.Text
       End Get
       Set(ByVal value As Double)
           TextBox2.Text = value.ToString("###,###,###,###")
       End Set
   End Property

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       TextBox3.Text = FormatNumber(n1 + n2, TriState.False)
   End Sub

End Class