Pregunta

Yo soy el mantenimiento de una aplicación para un cliente que se utiliza en dos ubicaciones.Uno en Inglaterra y otro en Polonia.

La base de datos se almacena en Inglaterra y usa el formato de £1000.00 para la moneda, pero la información está siendo recolectada localmente en Polonia, donde 1000,00 es el formato.

Mi pregunta es, en VB6 hay una función que toma una cadena de divisa en un formato local y lo convierte a otro, o se me acaba de analizar la cadena y reemplazar , o .?

Por CIERTO he mirado en Ocurrir, pero no sé si esto va a hacer lo que yo quiero.

¿Fue útil?

Solución

Los datos no se almacenan realmente como la cadena "£1000.00";se almacenan en formato numérico.

Barra lateral: Normalmente las bases de datos se configuran para almacenar cantidades de dinero utilizando el decimal tipo de datos (también llamado dinero en algunos DBs), o como un número de punto flotante (también llamado doble).

La diferencia es que cuando se almacena como decimal ciertos números como 0.01 están representados exactamente mientras que en doble los números sólo se puede almacenar aproximadamente, causando errores de redondeo.

La base de datos aparece para almacenar el número de "£1000.00" porque algo es el formato para mostrar.En VB6, hay una función FormatCurrency cual llevaría a un número como 1000 y devolver una cadena como "£1000.00".

Usted notará que el FormatCurrency la función no toma un argumento de especificar qué tipo de moneda a utilizar.Esto es debido a que, junto con el resto de la configuración regional específica de funciones en VB, figuras de la moneda de la configuración regional actual del sistema (desde el Panel de Control de Windows).

Eso significa que en mi sistema,

Debug.Print FormatCurrency(1000)

imprimir $1,000.00, pero si puedo ejecutar el mismo programa en un ordenador con Windows para establecer el reino unido de la configuración regional, es probable que la impresión £1,000.00, que , por supuesto, es algo completamente diferente.

Del mismo modo, tienes algo de código, en algún lugar, yo no sé de dónde, en Polonia, parece, que es responsable para el análisis del usuario de la cadena y la conversión de un número.Y si ese código en Visual Basic, de nuevo, confiando en el panel de control para decidir si "." o "," es el separador de miles y si "," o "." es el punto decimal.

La función CDbl convierte su argumento a un número.Así, por ejemplo, en mi sistema en el que NOS

Debug.Print CDbl("1.200")

produce el número uno punto dos, en un sistema con el Panel de Control Europeo de formato, se produciría el número mil doscientos.

Es posible que el problema es que tienes a alguien sentado un equipo con la configuración regional del panel de control configurado para usar "." como separador decimal, pero que está escribiendo "," como separador decimal.

Otros consejos

¿Qué base de datos está utilizando?Y qué tipo de datos es la cantidad almacenada en?

Mientras usted es siempre la conversión de un formato a otro, usted no necesita hacer cualquier análisis, basta con sustituir "." con "," o de la otra manera alrededor.Puede que tenga que quitar el "£"-signo, así si que se almacena en su cadena.

Probablemente hay una respuesta correcta que se ocupan de la cultura de los objetos y tal, pero la manera más fácil para tomar la entrada de la polaca de entrada, y reemplazar el , con un ., y, a continuación, guárdelo en su base de datos como tipo de "dinero" o "decimal".Si usted sabe que (posiblemente configurable por el usuario) son siempre de introducir los números en polaco o inglés, usted podría tener una función que se ejecute todos los números introducidos a través de convertir la cadena a un "decimal", escribió variable.También, para efectos de visualización puede ejecutar a través de otra función similar para asegurarse de que el usuario siempre ve el formato de número que se sienta cómodo.La clave aquí es para cambiarlo a un decimal tan pronto como usted lo consigue desde el usuario, y sólo cambie de nuevo a una cadena en el último paso antes de enviar hacia fuera para el usuario.

@KiwiBastard sí me lo creo.Eres el almacenamiento de su importe en una "varchar(n)" campo o utiliza una moneda/tipo decimal de campo?Si este es el caso, la divisa de los símbolos y los separadores son añadidos por parte de su cliente, y no habría ninguna necesidad de reemplazar algo en la base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top