Foro de elhacker.net

Programación => .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
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text)
  3.    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

Citar
Private 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
  1. 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
  1. Public Class Form1
  2.  
  3.    Dim num1 As Object
  4.    Dim num2 As Object
  5.  
  6.    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
  7.        If sender.Text.Contains(".") Then _
  8.             num1 = Convert.ToDouble(sender.Text) _
  9.        Else num1 = Convert.ToInt64(sender.Text)
  10.    End Sub
  11.  
  12.    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
  13.        If sender.Text.Contains(".") Then _
  14.             num2 = Convert.ToDouble(sender.Text) _
  15.        Else num2 = Convert.ToInt64(sender.Text)
  16.    End Sub
  17.  
  18.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  19.        TextBox3.Text = FormatNumber(num1 + num2, TriState.False)
  20.    End Sub
  21.  
  22. End Class
  23.  


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
  1. 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
  1. Public Sub Convert_Decimal(ByVal decimalVal As Decimal)
  2.  
  3.        Dim doubleVal As Double
  4.  
  5.        doubleVal = System.Convert.ToDouble(decimalVal)
  6. End Sub
  7.  

Código
  1. Dim num1 As Double = 2000
  2. Dim num2 As Double = 500
  3. Dim sum As Double = num1 + num2
  4.  
  5. MsgBox(sum.ToString("0.00"))
  6.  
  7.  


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

Código
  1. Dim textbox1 As String = textbox1.text
  2. Dim textbox2 As String = textbox2.text
  3. 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
  1. Format(cantidad, “##,##0.00″)
  2. 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
Y no es tan sencillo como:

Código
  1. Dim textbox1 As String = textbox1.text
  2. Dim textbox2 As String = textbox2.text
  3. Dim resultado As Integer = textbox1 + textbox2

no?

No, por esta razón:
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".

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
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
Creo que se me olvido decir, QUE YA ESTA RESUELTO...


JOSJOSJOS!

Citar
Aunque 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
JOSJOSJOS!

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

Si, muchas gracias?

Oye electro que opinas

Código
  1. Dim value As Double
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        value = TextBox1.Text
  5.        TextBox2.Text = (value.ToString("###,###,###,###"))
  6.    End Sub


Título: Re: Sumar dos Textbox
Publicado por: Eleкtro en 14 Junio 2013, 08:20 am
Si, muchas gracias?

Oye electro que opinas

Código
  1. Dim value As Double
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        value = TextBox1.Text
  5.        TextBox2.Text = (value.ToString("###,###,###,###"))
  6.    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
  1. Public Class Form1
  2.  
  3.    Public Property n1() As Double
  4.        Get
  5.            Return TextBox1.Text
  6.        End Get
  7.        Set(ByVal value As Double)
  8.            TextBox1.Text = value.ToString("###,###,###,###")
  9.        End Set
  10.    End Property
  11.  
  12.    Public Property n2() As Double
  13.        Get
  14.            Return TextBox2.Text
  15.        End Get
  16.        Set(ByVal value As Double)
  17.            TextBox2.Text = value.ToString("###,###,###,###")
  18.        End Set
  19.    End Property
  20.  
  21.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  22.        TextBox3.Text = FormatNumber(n1 + n2, TriState.False)
  23.    End Sub
  24.  
  25. End Class
  26.