none
Problema con decimales RRS feed

  • Pregunta

  • Hola de nuevo a todos,

    Tengo bastantes problemas a la hora de hacer calculos con valores de moneda Euro , es decir , decimales.

    El problema es que introduzco : 24.95 o 24,95 (Con coma o con punto) y el datagridview me muestra 2495.00

    En la base de datos lo tengo declarado como money . esta bien???

    Y en visual basic lo tengo declarado como Decimal , aun que he probado con single y con double. 
    Que tipo de datos es el mejor para mi caso???? y por que no lo muestra bien??

    Muchas gracias

    Saludos

     

    lunes, 30 de enero de 2012 11:23

Respuestas

  • pero el problema no es la conversion

    el problema es la query que usas, porque deberias pasas este por parametro, y no concatenere el string

     

     Dim precio_coste As Double = Convert.ToDouble(txtPrecioCoste.Text, CultureInfo.CreateSpecificCulture("en-US"))
    Dim precio_venta As Double = Convert.ToDouble(txtPrecioVenta.Text, CultureInfo.CreateSpecificCulture("en-US"))
    
    Dim query As String = "Insert into productos(ud_stock, precio_coste, precio_venta, peso, fecha_caducidad, nombre, formato_ind, cod_barras, marca) values ( @stock, @preciocoste, @precioventa, .....)"
    Dim cmd As New SqlCommand(query, connection)

    cmd.Parameters.AddWithValue("@stock", txtStock.Text)
    cmd.Parameters.AddWithValue("@preciocoste", precio_coste)
    cmd.Parameters.AddWithValue("@precioventa", precio_venta) .
    .

    cmd.ExecuteNonQuery()

     

    como son varios parametros solo puse algunos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 30 de enero de 2012 12:49
  • El problema es que introduzco : 24.95 o 24,95 (Con coma o con punto) y el datagridview me muestra 2495.00

    esto tiene que ver con la cultura de tu aplicacion

    recuerda que si usas una cultura

    es-ES el decimal sera la coma

    pero si usas en-US el decimal sera el punto

    podrias hacer

    Dim val As Double = Convert.ToDouble("24.95", CultureInfo.CreateSpecificCulture("en-US"))

    o

    Dim val As Double = Convert.ToDouble("24,95", CultureInfo.CreateSpecificCulture("es-ES"))

     

    tambien podrias fijas la cultura para todo la aplicacion

    Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES")

    esto lo deberias poner cuando inicia la aplicacion, para que tome esa cultura sin tener en cuenta la de la pc

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 30 de enero de 2012 12:08

Todas las respuestas

  • El problema es que introduzco : 24.95 o 24,95 (Con coma o con punto) y el datagridview me muestra 2495.00

    esto tiene que ver con la cultura de tu aplicacion

    recuerda que si usas una cultura

    es-ES el decimal sera la coma

    pero si usas en-US el decimal sera el punto

    podrias hacer

    Dim val As Double = Convert.ToDouble("24.95", CultureInfo.CreateSpecificCulture("en-US"))

    o

    Dim val As Double = Convert.ToDouble("24,95", CultureInfo.CreateSpecificCulture("es-ES"))

     

    tambien podrias fijas la cultura para todo la aplicacion

    Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES")

    esto lo deberias poner cuando inicia la aplicacion, para que tome esa cultura sin tener en cuenta la de la pc

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 30 de enero de 2012 12:08
  • Hola Leandro,


    El problema es que prueba de insertar los valores de las 2 formas , tanto con puntos como con Coma. y de las 2 formas me lo muestra mal.

    Tambien he probado de insertar " Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES") " en el formprincipal Evento Load.
    y sigue haciendo lo mismo .

     

    Que mas puedo hacer?

     

    Muchas gracias

    lunes, 30 de enero de 2012 12:32
  • tanto con puntos como con Coma. y de las 2 formas me lo muestra mal.

    priemro aclarar que las aplicacion magia no hacen

    la cultura es unica en un instante de tiempo, segun cual definas

    usar punto o coma indistintamente no se puede, es uno u otro, ambos al mismo tiempo no

    si vas a escribir con el punto entonces defines la cultura en-US, sino asignas la otra cultura

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 30 de enero de 2012 12:38
  • Hola de nuevo Leandro,


    Me refiero a que estoy haciendo pruebas , primero introduciendo los valores con comas y viendo el resultado : lo muestra mal.

    Vuelvo a ejecutar el programa y pruebo de insertar los valores con puntos , y el resultado tambien lo da mal.

     

    El codigo de insertar es este :

     Dim precio_coste As Double = Convert.ToDouble(txtPrecioCoste.Text, CultureInfo.CreateSpecificCulture("en-US"))
    Dim precio_venta As Double = Convert.ToDouble(txtPrecioVenta.Text, CultureInfo.CreateSpecificCulture("en-US"))
    
    'inserto los valores
    Dim query As String = "Insert into productos(ud_stock, precio_coste, precio_venta, peso, fecha_caducidad, nombre, formato_ind, cod_barras, marca) values ( '" & txtStock.Text & "','" & precio_coste & "','" & precio_venta & "','" & txtPeso.Text & "','" & dataCaducidad.Value & "','" & txtNombre.Text & "','" & CBformatoInd.Checked & "','" & txtCodigoBarras.Text & "','" & CBMarcasEntradas.Text & "')"
                    Dim cmd As New SqlCommand(query, connection)
                    cmd.ExecuteNonQuery()

     

     

     



    • Editado bertux77 lunes, 30 de enero de 2012 12:43
    lunes, 30 de enero de 2012 12:42
  • pero el problema no es la conversion

    el problema es la query que usas, porque deberias pasas este por parametro, y no concatenere el string

     

     Dim precio_coste As Double = Convert.ToDouble(txtPrecioCoste.Text, CultureInfo.CreateSpecificCulture("en-US"))
    Dim precio_venta As Double = Convert.ToDouble(txtPrecioVenta.Text, CultureInfo.CreateSpecificCulture("en-US"))
    
    Dim query As String = "Insert into productos(ud_stock, precio_coste, precio_venta, peso, fecha_caducidad, nombre, formato_ind, cod_barras, marca) values ( @stock, @preciocoste, @precioventa, .....)"
    Dim cmd As New SqlCommand(query, connection)

    cmd.Parameters.AddWithValue("@stock", txtStock.Text)
    cmd.Parameters.AddWithValue("@preciocoste", precio_coste)
    cmd.Parameters.AddWithValue("@precioventa", precio_venta) .
    .

    cmd.ExecuteNonQuery()

     

    como son varios parametros solo puse algunos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 30 de enero de 2012 12:49