como tomar la parte de un numero de dos digitos

Iniciado por luis456, 10 Febrero 2020, 18:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

luis456

Hola a Todos

Despues de algun tiempo he vuelto a este vicio de programar jeje pero ando muy quemado ;(

lo que quiero hacer es que a un número de dos dígitos tomar solo uno de ellos :

explico tengo unos texbox donde introdusco estos numeros:
Código (vbnet) [Seleccionar]
ReadOnly Property Num1 As Int32
       Get
           Return CInt(TextBox1.Text)
       End Get
   End Property


se supone que de ahi va para la función que paso por estos números etc etc .lo que quiero es modificar que si pongo por ejemplo el numero 20 pueda solo tomar el de la derecha o sea el 0 o viceversa ,esto lo envio a una variable l:

Código (vbnet) [Seleccionar]
Result1 = {Num1 + 1, Num1 + 3} _
                 .Distinct().ToArray ' Elimino duplicados


He probado en propiedades del texbox pero no es lo que quiero ,quiero es fracionar el numero sea al derecho o la isquierda


saludos
Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

EdePC

Saludos,

- Jeje acabo de descargarme el Visual Basic Express 2005 para hacer la prueba XD: http://go.microsoft.com/fwlink/?linkid=57033

- Lo cierto es que lo más habitual es ver que usan aritmética sencilla para obtener rangos numéricos si se están trabajando números, por ejemplo si tengo el número 32 y quiero el 2, pues le saco el módulo (resto) de 10:

2 = 32 % 10

- Si quiero el 3, divido el 32 entre 10 y le substraigo el módulo

3 = 32 / 10 - ( ( 32 % 10 ) / 10 )

-- Puedes ahorrarte la resta y simplemente dividir si conviertes el resultado a Entero

Código (vbnet) [Seleccionar]
Public Class Form1
    Private Sub btnCalc_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnCalc.Click
        Dim num As Integer = txtNum.Text
        txtDer.Text = num Mod 10
        txtIzq.Text = num / 10 - ((num Mod 10) / 10)
    End Sub
End Class


- Otra opción es usar las funciones predefinidas para tratar texto, en este caso Substring:

Código (vbnet) [Seleccionar]
Public Class Form1
    Private Sub btnCalc_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnCalc.Click
        txtDer.Text = txtNum.Text.Substring(1, 1)
        txtIzq.Text = txtNum.Text.Substring(0, 1)
    End Sub
End Class

**Aincrad**

#2
Facilmente Conviertes el texto del Textbox a un  Char Array y lo recorres con un For .

1) El textbox solo tendrá números de 2 dígitos? , si contiene mas de 2 dijitos entoces le metes un IF comprobando el ARRAY.COUNT.

te pongo un Ejemplo :

Código (vbnet) [Seleccionar]
Dim NumerodeIzquierda As String = String.Empty
       Dim NumerodeDerecha As String = String.Empty

       'Obtenemos Texto
       Dim Numeros As String = TextBox1.Text
       'Convertimos en un Array
       Dim TextArray() As Char = Numeros.ToArray
       Dim Check As Integer = 0
       ' Recorremos.
       For Each Numero As Char In TextArray
           If TextArray.Count = 2 Then
               If Check = 0 Then
                   NumerodeIzquierda = Numero.ToString
                   Check = 1
               ElseIf Check = 1 Then
                   NumerodeDerecha = Numero.ToString
                   Check = 2
               End If
           End If
       Next


Bueno esto seria un solución rapida, como especificaste Te separa los dos números .

Ej : Con el numero 32 te deja ;

NumerodeIzquierda = 3

NumerodeDerecha = 2


Recuerda que esto es en caso de que el numero sea solo de 2 dígitos, bueno aunque si modificas un toke lo ajustas a tus necesidades.

Mi Forma de Hacer Fácilmente lo que pides seria esta:

Código (vbnet) [Seleccionar]
Dim Numeros As String = TextBox1.Text   ' Obtenemos Texto del textbox en este caso seria 32
                   msgbox(Numeros(0))    ' Asi obtienes el Primer numero, en este caso es el 3
                   msgbox(Numeros(1))    ' Asi obtienes el Segundo numero, en este caso es el 2
                   


en este caso es casi lo mismo que te puso el Compañero @EdePC . la diferencia es que ahi el esta tomando el numero en modo de rango (yo lo usaria para una gran cantidad de digitos ) :

txtDer.Text = txtNum.Text.Substring(1, 1)
       txtIzq.Text = txtNum.Text.Substring(0, 1)


Para aplicarlo a tan solo 2 dígitos solo tomo el numero por posición como te mostré anteriormente.





No mames @EdePC , Ahora le entras a vb.net .





luis456

Gracias a los dos por sus aporte ,probare los metodos,pero claro programo por ahora lo fines de semana,ya que trabajo fuera de casa toda la semana y este portatil no tira bien jeje y para programar no vale

Ya os contare como fue cuando llegue a casa

Saludos
Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

EdePC

Cita de: luis456 en 12 Febrero 2020, 13:32 PM
... y este portatil no tira bien jeje ...

- Por eso me descargué la versión 2005 XD. Al cabo es para hacer cositas sencillitas.

Serapis

Veamos de entrada si tienes una cifra de 0 a 99, es decir de dos cifras, basta con usar un tipo de datos byte.

Segundo, obtener cualquier dígito de un número es algo trivial, ya son matemáticas de niños de 10 años.

La función módulo (resto de una división) en un valor decimal pué sse queda con la última cifra dle valor:
123 modulo 10 = 3
para quedarse con la cifra del medio. Primero hay que saber si queremos acceder a ella solo tras haber tomado el las unidades o directamente.
- Si ya hemos tomado las unidades, para tomar las decenas, recurridmoa las matemáticas, haciendo una división que se quede solo con la parte entera:
123 / 10 = 12'3
la parte entera en 12, que en programación (VB) puede hacerse con 123 \ 10 = 12
ahora como el 2 son las unidades, procedes igual que antes...

etc, etc... sea cual sea el número.
Las divisiones y módulos son operaciones muy rápidas, así que no convierta a string un número salvo que luego tengas hacer otras cosas de tipo string con ello...
Si directamente el dato es un string (caso del vaslor procedente de un control de texto, por ejemplo), puedes acceder direcamente al carácter en una posición dada, mediante alguno de los métodos que provee la clase string, o los métodos heredados  de antiguas versiones de Basic, como son Left, Mid y Right, que admeás te permiten tomar más de un carácter a la vez.

Sé eficiente, pensando en si toda la operación es de cadenas o de números. No alternes alegremente entre uno y otro caso contínuamente a la hora de resolver problemas, acaba en ineficiencia...

luis456

Bueno mientras espero el fin de semana a llegar a casa y pensando en esto  ::)

se me ocurre que ya que tengo lo del los tex echo ,es trabajar en la variable : explico

Código (vbnet) [Seleccionar]
Result1 = {Num1 + 1, Num1 + 3} _
                  .Distinct().ToArray ' Elimino duplicados



Num1 es la variable que trae los numeros ,mi idea es antes de pasarlo por esta funcion que venga ya con el numero unico ,me imagino que lo podria hacer con la funcion de estraer ??

Substring(1, 1) por ejemplo

saludos
Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

Bueno chicos he resuelto mi problema de la forma mas fácil :

Código (vbnet) [Seleccionar]
ReadOnly Property Num6 As Int32
    ' Get
    ' Return CInt(TextBox6.Text)
    ' End Get
    ' End Property

    ReadOnly Property Num6 As Int32
        Get
            Return CInt(TextBox6.Text.Substring(0, 1))
            'TextBox6.Text.Substring(1, 1)
        End Get
    End Property


Gracias a todos por vuestro aporte :)
hasta la siguiente ves

Luis
Que tu sabiduria no sea motivo de Humillacion para los demas