Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: lucius en Agosto 07, 2012, 08:32:04 pm

Título: Aplicar formato a campo temporal double
Publicado por: lucius en Agosto 07, 2012, 08:32:04 pm
Como puedo darle forma a mi campo temporal "precio" cuando me enlazo con un datagrid no hay problema pero con MSHflexgrid por ejemplo 125.49 me devuelve en el grid 125.489999999999.

Tambien el caso de que quiera que mi campo "precio" sea tipo double cual deberia ser la longitud nose porque "colocaron" 10.2?

Código: [Seleccionar]
rsTemp.Fields.Append "precio", adDouble, 10.2, adFldIsNullable
Bueno dejo todo el codigo solo agregan los controles

Código: [Seleccionar]
Dim rsTemp As New Recordset

Sub Seteo_Grid_Herarquico(Grid As MSHFlexGrid)
Dim i As Long
With Grid
    Set .DataSource = Nothing
    .Rows = 2
    '.Clear
    For i = 0 To .Cols - 1
        .TextMatrix(1, i) = "" '
    Next
End With

If rsTemp.RecordCount > 0 Then
   Set Grid.DataSource = rsTemp
End If
Grid.FormatString = "ID   |NOMBRE   |precio"
End Sub

Private Sub btnAgregar_Click()
    rsTemp.AddNew
    rsTemp.Fields(0) = Trim(txtIDn)
    rsTemp.Fields(1) = Trim(txtNombre)
    rsTemp.Fields(2) = Trim(txtPrecio)
    rsTemp.Update
    Call Seteo_Grid_Herarquico(MSHFlexgrid1)
End Sub

Sub TablaTemporal2()
    rsTemp.CursorType = adOpenStatic
    rsTemp.Fields.Append "IDn", adVarChar, 6, adFldIsNullable
    rsTemp.Fields.Append "Nombre", adVarChar, 35, adFldIsNullable
    rsTemp.Fields.Append "precio", adDouble, 10.2, adFldIsNullable
    rsTemp.Open
    Call Seteo_Grid_Herarquico(MSHFlexgrid1)
End Sub

Private Sub Form_Load()

Call TablaTemporal2

End Sub

Título: Re:Aplicar formato a campo temporal double
Publicado por: seba123neo en Agosto 07, 2012, 10:16:50 pm
si, creo que es asi nomas el control y te la tenes que rebuscar manualmente, por ejemplo haciedo un Format ya funciona bien.

Código: (vb) [Seleccionar]
MSHFlexGrid1.TextMatrix(1, 3) = Format(125.49, "0.00")
saludos.

Título: Re:Aplicar formato a campo temporal double
Publicado por: lucius en Agosto 07, 2012, 10:59:42 pm
Pero tendria que crear una variable como contador por que los item se agregan y eliminan o en todo caso aplicar un for cada vez que se agregue o eliminte algo o me equivoco.

Habra otra forma de hacer esto quizas creando el rs temporal de otra manera.
Título: Re:Aplicar formato a campo temporal double
Publicado por: raul338 en Agosto 07, 2012, 11:10:41 pm
en lugar de adDouble, no podrias utilizar adCurrency? Ni se si existe, pero para valores monetarios, es mejor Currency
Título: Re:Aplicar formato a campo temporal double
Publicado por: lucius en Agosto 08, 2012, 01:56:36 am
El currency esta bien pero devuelve por ejemplo 180.4 en lugar de 180.40 fuera de eso esta bien, alguna otra alternativa
Título: Re:Aplicar formato a campo temporal double
Publicado por: raul338 en Agosto 08, 2012, 10:19:50 am
Claro, ahí si deberias utilizar FormatCurrency y listo :P
Título: Re:Aplicar formato a campo temporal double
Publicado por: ssccaann43 en Agosto 08, 2012, 11:08:45 am
Código: (vb) [Seleccionar]
'Usando la coma(,) como separador decimal
Monto="2000,023"
MSHFlexGrid1.TextMatrix(1, 3) = FormatCurrency(Monto, 2)
Título: Re:Aplicar formato a campo temporal double
Publicado por: lucius en Agosto 08, 2012, 08:05:49 pm
Cuando en mi textbox tengo coma osea 125,48 me muestra 12545.00 dejo el ejemplo cmpleto, la verdad estoy algo mareado con este asunto.

Dejo el ejemplo para que lo revisen.

https://rapidshare.com/files/2859248902/foro.rar (https://rapidshare.com/files/2859248902/foro.rar)
Título: Re:Aplicar formato a campo temporal double
Publicado por: lucius en Agosto 10, 2012, 01:17:41 am
Al final soluciones con la funcion Cdbl
Código: [Seleccionar]
rsTemp.Fields(2) = CDbl(txtPrecio) y reemplazar el decimal sea punto o coma y darle formato como me dijieron en respuestas anteriores.

Código: [Seleccionar]
With MSHFlexgrid1
 For i = 1 To .Rows - 1
   '.Col = 5
   .Row = i
   If ObtenerDecimal(LOCALE_SDECIMAL) = "," Then
      .TextMatrix(i, 2) = Format(Replace(.TextMatrix(i, 2), ".", ","), "Fixed")
   Else
      .TextMatrix(i, 2) = Format(Replace(.TextMatrix(i, 2), ",", "."), "Fixed")
   End If
 Next i
End With

Por ultimo me recomendaron el listview y me animare para utilizarlo, saludos y gracias.