none
Problema con decimales

    Pregunta

  • Hola a todos:

    Tengo la siguiente lista y no hay forma de que salgan los valores de 2 decimales, siempre salen  a 0. Ejemplo: 123,00 cuando en realidad llevan valores decimales.

    Estoy aplicando la función replace para que me funcione en bases de datos Acces y Sql, pero no se por qué razón no me aparecen dichos decimals con su valor, siempre son 00.

    Os adjunto la clase para crear la lista:

    Public Class ActualizarFlujosDescontados
        Private m_PorcsTotal As Decimal
        Private m_MediaAnual As Decimal
        Private m_PorcMediaAnual As Decimal
        Private m_Ejer0 As Decimal
        Private m_orden As String
        Private m_empresa As String
    
    
        Public Sub New(PorcsTotal As Decimal, MediaAnual As Decimal, PorcMediaAnual As Decimal, Ejer0 As Decimal, orden As String, empresa As String)
            m_PorcsTotal = PorcsTotal
            m_MediaAnual = MediaAnual
            m_PorcMediaAnual = PorcMediaAnual
            m_Ejer0 = Ejer0
            m_empresa = empresa
            m_orden = orden
    
        End Sub
    
        Public ReadOnly Property PorcsTotal As Decimal
            Get
                Return m_PorcsTotal
            End Get
        End Property
    
        Public ReadOnly Property MediaAnual As Decimal
            Get
                Return m_MediaAnual
            End Get
        End Property
    
        Public ReadOnly Property PorcMediaAnual As Decimal
            Get
                Return m_PorcMediaAnual
            End Get
        End Property
    
        Public ReadOnly Property Ejer0 As Decimal
            Get
                Return m_Ejer0
            End Get
        End Property
    
        Public ReadOnly Property orden As String
            Get
                Return m_orden
            End Get
        End Property
    
        Public ReadOnly Property empresa As String
            Get
                Return m_empresa
            End Get
        End Property
    
    
        Public Function Update() As String
    
            Return String.Format("UPDATE Flujos Set PorcsTotal={0}, MediaAnual={1}, PorcMediaAnual={2}, Ejer0={3} WHERE  Orden='{4}' AND Cod_Empresa='{5}'",
                                 ConvertDatos.ConversorDatos(m_PorcsTotal, 2).ToString().Replace(",", "."), m_MediaAnual.ToString().Replace(",", "."), m_PorcMediaAnual.ToString().Replace(",", "."), m_Ejer0.ToString().Replace(",", "."), m_orden, m_empresa)
    
        End Function
    
    
    End Class
    

    Estoy probando con la función ConvertDatos, no da error, pero sigue saliendo a 00 los dos decimales que necesito.

    Me falta alguna cosa y no se lo que es.

    Adjunto la función ConvertDatos y la llamada o relleno de una fila de la lista.

    Imports System.Globalization
    
    
    
    Public Class ConvertDatos
        Public Shared Function ConversorDatos(valor As Decimal, decimales As Integer) As Object
    
            valor = Decimal.Round(valor, decimales)
    
            If (Configuracion.strNombreBaseDeDatos = "MiCadenaConexion") Then
                ' Para Access devolver el número como cadena alfanumérica formateada
                ' con la referencia cultural del subproceso actual.
                Return valor.ToString(CultureInfo.CurrentCulture)
    
            Else
                ' Para las restantes bases de datos, devolver el valor decimal.
                Return valor
    
            End If
    
        End Function
    End Class
    

    Y esta es la creación de una fila:

    Public Shared Sub ValoracionFlujosDeCajaDescontados_ActualizacionValoresTabla()
    
            Dim lst As New List(Of ActualizarFlujosDescontados)
    
            Dim empresa As String = VarGlobal.StrCodEmpresa
    
            Try
                lst.Add(New ActualizarFlujosDescontados(PorcTotal(0), MediaAnualDeDisponible, PorcMediaAnual(0), EfectOtrosActLiquidEquiv(0), "001", empresa))
    
        Using cnn As DbConnection = da.CreateConnection()
                    cnn.Open()
    
                    ' Creamos el Commando
                    Dim cmd As DbCommand = cnn.CreateCommand()
    
                    For Each item As ActualizarFlujosDescontados In lst
    
                        cmd.CommandText = item.Update()
    
                        cmd.ExecuteNonQuery()
    
                    Next
                End Using
    
    
            Catch ex As Exception
                MessageBox.Show("Bloqueo en carga de Fórmula:     'ListasOF Flujos Descontados'" & vbCrLf & ex.Message & vbCrLf &
                       "Acepte para continuar.", "PROGRAMA ", MessageBoxButtons.OK, MessageBoxIcon.Error)
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Debe ser una tontería pero no atino que es lo que debo cambiar o añadir, ara que me salgan los valores de los decimales.

    Un saludo a todos.

    Gemma

    domingo, 16 de octubre de 2016 13:30

Respuestas

  • Hola:

    Tema solucionado.

    Era un problema de una base de datos que tenía el campo a decimal(18,2) y si tiene que trabajar con porcentajes, tenía que ser superior, lo tengo a (18,5).

    Buenos disculpas al foro, pero ya está solucionado.

    Un saludo.

    Gemma

    • Marcado como respuesta gemma_campillo domingo, 16 de octubre de 2016 14:26
    domingo, 16 de octubre de 2016 14:26

Todas las respuestas

  • Hola:

    Tema solucionado.

    Era un problema de una base de datos que tenía el campo a decimal(18,2) y si tiene que trabajar con porcentajes, tenía que ser superior, lo tengo a (18,5).

    Buenos disculpas al foro, pero ya está solucionado.

    Un saludo.

    Gemma

    • Marcado como respuesta gemma_campillo domingo, 16 de octubre de 2016 14:26
    domingo, 16 de octubre de 2016 14:26
  • Bueno saberlo por si algún día se me presenta el mismo problema. Gracias por compartir la solución Gemma.
    lunes, 17 de octubre de 2016 14:20