Autor Tema: Aplicar formato a campo temporal double  (Leído 4591 veces)

0 Usuarios y 1 Visitante están viendo este tema.

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Aplicar formato a campo temporal double
« 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

« última modificación: Agosto 07, 2012, 08:33:53 pm por lucius »

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Aplicar formato a campo temporal double
« Respuesta #1 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.


lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Aplicar formato a campo temporal double
« Respuesta #2 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.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Aplicar formato a campo temporal double
« Respuesta #3 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

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Aplicar formato a campo temporal double
« Respuesta #4 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

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Aplicar formato a campo temporal double
« Respuesta #5 en: Agosto 08, 2012, 10:19:50 am »
Claro, ahí si deberias utilizar FormatCurrency y listo :P

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Aplicar formato a campo temporal double
« Respuesta #6 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)
Miguel Núñez.

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Aplicar formato a campo temporal double
« Respuesta #7 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
« última modificación: Agosto 08, 2012, 11:21:37 pm por lucius »

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Aplicar formato a campo temporal double
« Respuesta #8 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.