Formato decimal

Tengo una función en visual basic que recibe un código como parámetro, dependiendo de el código que reciba me retorna un multiplicador
ej si el código es 40 multiplica por 2
si es 50 multiplica por 2.5
el problema que tengo es que cuando compilo el programa y lo instalo en otra maquina en ves de tomarme el . Como separador de decimales me lo toma como separador de miles y me calcula cualquier cosa
pensé que serian los regional settings pero creo que ese no es el problema porque copie exactamente los mismo que tenia donde cree el programa e igual me sigue dando mal
lo que yo quiero saber es is existe alguna función par formatear esto sin que me importe que regional setting tenga configurada la maquina donde se va a instalar el programa.

2 Respuestas

Respuesta
1
Tienes que extraer el parámetro de la configuración del equipo para que determines el separador decimal. Checa la siguiente página:
http://www.jrubi.com
Saludos y mil disculpas por la tardanza.
Respuesta
1
El problema si es de la configuración regional de la maquina, justamente es de la sección Números y en la parte de searador decimal y de miles, pero es un tema de como te muestra los datos a vos en pantalla, internamente vb utiliza el punto como separador decimal.
Cuando tomes un valor numérico desde un label o un textbox tienes que convertirlo en una cadena numérica para no tener problemas, por ejemplo un textbox le muestra al usuario un resultado:
"12,353" si intentas hacer alguna operación matemática con este resultado, te va a ver el signo "," como separador de miles, para solucionar eso tienes que leer el valor de esta manera:
CDbl(Text1.text), revisa en tu programa y si lees resultados de algun control donde te esta mostrando numeros utiliza CDbl(tu control) para convertir, espero que soluciones el problema, sino enviame alguna parte del codigo donde te de un error por los decimales y te mando la solucion.
Me falto lo más importante, para asegurarte de que tu programa funcione bien en cualquier maquina sin importar la configuración regional, tienes que trabajar absolutamente todo dentro de variables (Long, double) o cualquiera que sea NUMÉRICA y admita decimales, y si tienes que mostrar algún resultado total o parcial al usuario lo haces tomando el valor de la variable, en el ejemplo anterior para mostrar el resultado tendrías que haber puesto:
Text1.Text = str(resultado)
Y de esa manera cuando tengas que trabajar con ese resultado lo lees de la variable resultado y no desde el textbox, así te despreocupas del echo de tienes una coma o un punto, las variables en vb no las modifica la configuración regional, pero si tienes el numero 1.234 en una variable y la maquina esta configurada con "," decimal, al mostrar ese numero en un textbos vas a ver "1,234" y al recuperarlo podes tener problemas, por eso siempre trabaja con variables, trata de no utilizar los datos de los textbox y labels para funciones.
Estoy levantando datos de una base
Los datos que levanto son importes
La cosa es que los importes que levanto de la base de datos son cadenas de texto de este tipo
145,56
La coma es un separador decimal pero visual basic (como vos me dijiste me lo toma como separador de mil) lo que estaría necesitando es alguna función que me tome esa cadena de texto me busque la coma y me la cambie por un punto así después puedo cambiarla a doble
Muchas gracias por la explicación anterior
Saludos
El tener importes en una base de datos en formato cadena de texto es un problema( si podes cambialo), te paso una rutina que te convierte esa cadena en numérica, sin importar la configuración regional, siempre y cuando respete el formato de dos decimales en todos los importes(aunque sean textos), si no es así avisame y te envío otra solución.
Declara en el procedimiento General la Variable Valor (o el nombre que quieras)como single
Dim Valor as Single
la rutina es esta:
Dim paso As String
Importe = str(importe de la base de datos)
paso = Left(Importe, Len(Importe) - 3) & Right(Importe, 2)
Valor = Val(paso) / 100
Esta rutina te saca la coma de la cadena, con esto te queda en Valor el importe, pero en formato Single y con 2 decimales.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas