none
cambia los decimales a entero. RRS feed

  • Pregunta

  • saludos la situacion es la siguiente, he realizado una aplicacion en visual estudio 2010 y access por medio de la cual guardo datos desde visual a una base de datos access en el proceso se calculan promedios que al momento de guardar los datos se guardan pero como entero. por ejemplo si el promedio es 15,53 al darle al botón guardar aparece como 1553. pero esto ocurre cuando instalo el ejecutable en otra pc pues donde diseñe la aplicación funciona perfecto. de antemano muy agradecido por su ayuda.
    lunes, 20 de mayo de 2019 0:53

Respuestas

  • por ejemplo si el promedio es 15,53 al darle al botón guardar aparece como 1553

    Estas cosas ocurren cuando haces conversiones implícitas sin tener en cuenta en CurrentCulture. Cuando ejecutas el programa en un ordenador que está configurado con coma decimal, entonces entiende bien "15,33", pero cuando lo ejecutas en un equipo configurado con punto decimal y coma como separador de miles, entonces entiende que la coma del "15,33" es el separador de miles y lo desprecia, resultando el valor 1553.

    Para evitarlo: no hagas conversiones implícitas, que en otros lenguajes como C# no se pueden hacer, pero en VB los programadores tienden a ser terriblemente descuidados en ese sentido, asignando Strings a variables numéricas sin pensar en la conversión implícita que ello supone. Te recomiendo activar el "Option Strict On" para que el compilador te avise de los sitios en los que eso ocurre.

    Entonces, en los sitios en los que haya que meter una conversión, la escribes explícitamente y usas una de las sobrecaras que te permite forzar el Culture, para que no dependas de la configuración regional que tenga el ordenador en cada momento. Por ejemplo, si quieres que tu programa siempre use una coma para los decimales aunque se ejecute en un ordenador configurado para usar el punto, puedes convertir así:

    Dim s as string = "15,33"
    Dim d as Decimal = Decimal.Parse(s, new CultureInfo("es-ES"))

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 20 de mayo de 2019 14:58
    • Marcado como respuesta niazoa domingo, 26 de mayo de 2019 20:00
    lunes, 20 de mayo de 2019 6:11

Todas las respuestas

  • Hola

    Si tiene solo dos decimales multiplica por 100

    lunes, 20 de mayo de 2019 5:37
  • por ejemplo si el promedio es 15,53 al darle al botón guardar aparece como 1553

    Estas cosas ocurren cuando haces conversiones implícitas sin tener en cuenta en CurrentCulture. Cuando ejecutas el programa en un ordenador que está configurado con coma decimal, entonces entiende bien "15,33", pero cuando lo ejecutas en un equipo configurado con punto decimal y coma como separador de miles, entonces entiende que la coma del "15,33" es el separador de miles y lo desprecia, resultando el valor 1553.

    Para evitarlo: no hagas conversiones implícitas, que en otros lenguajes como C# no se pueden hacer, pero en VB los programadores tienden a ser terriblemente descuidados en ese sentido, asignando Strings a variables numéricas sin pensar en la conversión implícita que ello supone. Te recomiendo activar el "Option Strict On" para que el compilador te avise de los sitios en los que eso ocurre.

    Entonces, en los sitios en los que haya que meter una conversión, la escribes explícitamente y usas una de las sobrecaras que te permite forzar el Culture, para que no dependas de la configuración regional que tenga el ordenador en cada momento. Por ejemplo, si quieres que tu programa siempre use una coma para los decimales aunque se ejecute en un ordenador configurado para usar el punto, puedes convertir así:

    Dim s as string = "15,33"
    Dim d as Decimal = Decimal.Parse(s, new CultureInfo("es-ES"))

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 20 de mayo de 2019 14:58
    • Marcado como respuesta niazoa domingo, 26 de mayo de 2019 20:00
    lunes, 20 de mayo de 2019 6:11