none
asignar numero de decimales RRS feed

  • Pregunta

  • Saludos amigos,

    tengo el siguiente problema, necesito a un numero asignarle el numero de decimales en VFP lo hacia de esta manera : STR(thisform.text1.value,10,4)

    le indicaba la funcion ( STR), el texto o variable que necesitaba configurar (thisform.text1.value), la parte entera (10) y el numero de decimales (4)...

    ahora necesito hacer lo mismo en VB.Net espero me puedan ayudar, saludos


    Moisès Daniel Vilchez Tello Programador de Aplicaciones Chiclayo, Peru

    viernes, 13 de abril de 2012 20:27

Respuestas

  • hola

    no has intentado usando

    Text1.Text = Convert.ToDecimal(Text1.Text).ToString("N4")

    con esto defines un formato numerico con 4 decimales

    debes convertir el valor que ingresas a numericos y luego aplciar el formato sobre este para apsarlo a string

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    viernes, 13 de abril de 2012 20:30
  • "Peru_Male" preguntó:

    > necesito a un numero asignarle el numero de decimales
    > en VFP lo hacia de esta manera : STR(thisform.text1.value,10,4)
    >
    > le indicaba la funcion ( STR), el texto o variable que necesitaba
    > configurar (thisform.text1.value), la parte entera (10) y el
    > numero de decimales (4)...
    >
    > ahora necesito hacer lo mismo en VB.Net

    Pero, ¿es que necesitas que la parte entera del número siempre sea de 10 dígitos y la decimal de 4 dígitos? Si es así, entonces necesitarás utilizar el siguiente formato de cadena personalizado:

            Dim valor As Decimal
    
            ' Intentamos convertir a Decimal el valor escrito
            ' en el control TextBox.
            '
            Dim bln As Boolean = Decimal.TryParse(TextBox1.Text, valor)
    
            If (bln) Then
                ' La conversión se ha efectuado satisfactoriamente.
                TextBox1.Text = String.Format("{0:0000000,000.0000}", valor)
    
            Else
                ' No se ha podido convertir el valor a Decimal.
                TextBox1.Clear()
    
            End If

    De ésta manera, la parte entera se rellenará de ceros a la izquierda hasta que se completen los 10 dígitos.

    ¿Que te dá igual que la parte entera tenga o no 10 dígitos, pero que la parte decimal tenga siempre 4 dígitos? Entonces utiliza éste otro formato:

            TextBox1.Text = String.Format("{0:#,##0.0000}", valor)

    Por último, si no deseas que te aparezca el separador de miles, elimina del formato la coma, pero deja el punto decimal. Tanto uno como otro te respetará el separador de decimales o de miles que tengas establecido en la configuración regional de tu sistema operativo.

    Para más información sobre los formatos personalizados consulta el siguiente enlace:

    Cadenas con formato numérico personalizado

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    sábado, 14 de abril de 2012 10:54
    Moderador
  • Bien.. Yo tenia un problema parecido. Quería que mi Text fuera formato moneda, hace un par de dias encontre en este Foro una Dll que me ayudo mucho, ya que es mucho mejor que un Textbox Original. Te Recomiendo que la pruebes y me avisas

    Dll del TextBoxEditor

    Para configurarla en caso a los decimales te vas a lo ultimo de sus propiedades y cambias la del Formato.

    Quiero dar gracias a las Hugo de la Peña y Marvin Pineda que gracias a ellos descubrí esta Magnifica Dll


    Jhonatan Plata http://kayprogramacion.blogspot.com/

    sábado, 14 de abril de 2012 12:26
  • Puedes usar esta función que encontré y es muy util. Lo que hace es te permite agregar dos decimales después de la coma.

    Se coloca en el evento keypress de la caja de texto.

        

     If e.KeyChar = "."c Then
    ' si se pulsa en el punto se convertirá en coma
    e.Handled = True
    SendKeys.Send(",")
     End If

     NumeroDec(e, Me.txtcotizacion)->clase mencionada.

    Function NumeroDec(ByVal e As System.Windows.Forms.KeyPressEventArgs, ByVal Text As TextBox) As Integer

            Dim dig As Integer = Len(Text.Text & e.KeyChar)
            Dim a, esDecimal, NumDecimales As Integer
            Dim esDec As Boolean
            ' se verifica si es un digito o un punto 
            If Char.IsDigit(e.KeyChar) Or e.KeyChar = "," Then
                e.Handled = False
            ElseIf Char.IsControl(e.KeyChar) Then
                e.Handled = False
                Return a
            Else
                e.Handled = True
            End If
            ' se verifica que el primer digito ingresado no sea un punto al seleccionar
            If Text.SelectedText <> "" Then
                If e.KeyChar = "," Then
                    e.Handled = True
                    Return a
                End If
            End If
            If dig = 1 And e.KeyChar = "," Then
                e.Handled = True
                Return a
            End If
            'aqui se hace la verificacion cuando es seleccionado el valor del texto
            'y no sea considerado como la adicion de un digito mas al valor ya contenido en el textbox
            If Text.SelectedText = "" Then
                ' aqui se hace el for para controlar que el numero sea de dos digitos - contadose a partir del punto decimal.
                For a = 0 To dig - 1
                    Dim car As String = CStr(Text.Text & e.KeyChar)
                    If car.Substring(a, 1) = "," Then
                        esDecimal = esDecimal + 1
                        esDec = True
                    End If
                    If esDec = True Then
                        NumDecimales = NumDecimales + 1
                    End If
                    ' aqui se controla los digitos a partir del punto numdecimales = 4 si es de dos decimales 
                    If NumDecimales >= 4 Or esDecimal >= 2 Then
                        e.Handled = True
                    End If
                Next
            End If
        End Function

    Espero que les sirva.

    lunes, 16 de abril de 2012 19:14

Todas las respuestas

  • hola

    no has intentado usando

    Text1.Text = Convert.ToDecimal(Text1.Text).ToString("N4")

    con esto defines un formato numerico con 4 decimales

    debes convertir el valor que ingresas a numericos y luego aplciar el formato sobre este para apsarlo a string

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    viernes, 13 de abril de 2012 20:30
  • "Peru_Male" preguntó:

    > necesito a un numero asignarle el numero de decimales
    > en VFP lo hacia de esta manera : STR(thisform.text1.value,10,4)
    >
    > le indicaba la funcion ( STR), el texto o variable que necesitaba
    > configurar (thisform.text1.value), la parte entera (10) y el
    > numero de decimales (4)...
    >
    > ahora necesito hacer lo mismo en VB.Net

    Pero, ¿es que necesitas que la parte entera del número siempre sea de 10 dígitos y la decimal de 4 dígitos? Si es así, entonces necesitarás utilizar el siguiente formato de cadena personalizado:

            Dim valor As Decimal
    
            ' Intentamos convertir a Decimal el valor escrito
            ' en el control TextBox.
            '
            Dim bln As Boolean = Decimal.TryParse(TextBox1.Text, valor)
    
            If (bln) Then
                ' La conversión se ha efectuado satisfactoriamente.
                TextBox1.Text = String.Format("{0:0000000,000.0000}", valor)
    
            Else
                ' No se ha podido convertir el valor a Decimal.
                TextBox1.Clear()
    
            End If

    De ésta manera, la parte entera se rellenará de ceros a la izquierda hasta que se completen los 10 dígitos.

    ¿Que te dá igual que la parte entera tenga o no 10 dígitos, pero que la parte decimal tenga siempre 4 dígitos? Entonces utiliza éste otro formato:

            TextBox1.Text = String.Format("{0:#,##0.0000}", valor)

    Por último, si no deseas que te aparezca el separador de miles, elimina del formato la coma, pero deja el punto decimal. Tanto uno como otro te respetará el separador de decimales o de miles que tengas establecido en la configuración regional de tu sistema operativo.

    Para más información sobre los formatos personalizados consulta el siguiente enlace:

    Cadenas con formato numérico personalizado

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    sábado, 14 de abril de 2012 10:54
    Moderador
  • Bien.. Yo tenia un problema parecido. Quería que mi Text fuera formato moneda, hace un par de dias encontre en este Foro una Dll que me ayudo mucho, ya que es mucho mejor que un Textbox Original. Te Recomiendo que la pruebes y me avisas

    Dll del TextBoxEditor

    Para configurarla en caso a los decimales te vas a lo ultimo de sus propiedades y cambias la del Formato.

    Quiero dar gracias a las Hugo de la Peña y Marvin Pineda que gracias a ellos descubrí esta Magnifica Dll


    Jhonatan Plata http://kayprogramacion.blogspot.com/

    sábado, 14 de abril de 2012 12:26
  • Puedes usar esta función que encontré y es muy util. Lo que hace es te permite agregar dos decimales después de la coma.

    Se coloca en el evento keypress de la caja de texto.

        

     If e.KeyChar = "."c Then
    ' si se pulsa en el punto se convertirá en coma
    e.Handled = True
    SendKeys.Send(",")
     End If

     NumeroDec(e, Me.txtcotizacion)->clase mencionada.

    Function NumeroDec(ByVal e As System.Windows.Forms.KeyPressEventArgs, ByVal Text As TextBox) As Integer

            Dim dig As Integer = Len(Text.Text & e.KeyChar)
            Dim a, esDecimal, NumDecimales As Integer
            Dim esDec As Boolean
            ' se verifica si es un digito o un punto 
            If Char.IsDigit(e.KeyChar) Or e.KeyChar = "," Then
                e.Handled = False
            ElseIf Char.IsControl(e.KeyChar) Then
                e.Handled = False
                Return a
            Else
                e.Handled = True
            End If
            ' se verifica que el primer digito ingresado no sea un punto al seleccionar
            If Text.SelectedText <> "" Then
                If e.KeyChar = "," Then
                    e.Handled = True
                    Return a
                End If
            End If
            If dig = 1 And e.KeyChar = "," Then
                e.Handled = True
                Return a
            End If
            'aqui se hace la verificacion cuando es seleccionado el valor del texto
            'y no sea considerado como la adicion de un digito mas al valor ya contenido en el textbox
            If Text.SelectedText = "" Then
                ' aqui se hace el for para controlar que el numero sea de dos digitos - contadose a partir del punto decimal.
                For a = 0 To dig - 1
                    Dim car As String = CStr(Text.Text & e.KeyChar)
                    If car.Substring(a, 1) = "," Then
                        esDecimal = esDecimal + 1
                        esDec = True
                    End If
                    If esDec = True Then
                        NumDecimales = NumDecimales + 1
                    End If
                    ' aqui se controla los digitos a partir del punto numdecimales = 4 si es de dos decimales 
                    If NumDecimales >= 4 Or esDecimal >= 2 Then
                        e.Handled = True
                    End If
                Next
            End If
        End Function

    Espero que les sirva.

    lunes, 16 de abril de 2012 19:14