Pergunta

Estou mantendo um aplicativo para um cliente usado em dois locais.Um na Inglaterra e outro na Polónia.

A base de dados está armazenada em Inglaterra e utiliza o formato £1000,00 como moeda, mas a informação está a ser recolhida localmente na Polónia, onde 1000,00 é o formato.

Minha pergunta é: no VB6 existe uma função que pega uma string de moeda em um formato local e converte para outro, ou terei apenas que analisar a string e substituir , ou .?

Aliás, eu olhei para o CCur, mas não tenho certeza se isso fará o que eu quero.

Foi útil?

Solução

Os dados não são realmente armazenados como a string "£1000.00";ele é armazenado em algum formato numérico.

Barra Lateral: Normalmente, os bancos de dados são configurados para armazenar quantias de dinheiro usando o método decimal tipo de dados (também chamado dinheiro em alguns bancos de dados), ou como um número de ponto flutuante (também chamado dobro).

A diferença é que quando ele é armazenado como decimal certos números como 0,01 são representados exatamente enquanto em dobro esses números só podem ser armazenados aproximadamente, causando erros de arredondamento.

O banco de dados parece armazenar o número como "£1000.00" porque algo está formatando-o para exibição.No VB6, existe uma função FormatCurrency que pegaria um número como 1000 e retornaria uma string como "£1000.00".

Você notará que o FormatCurrency A função não aceita um argumento especificando que tipo de moeda usar.Isso ocorre porque ele, juntamente com todas as outras funções específicas de localidade no VB, calcula a moeda a partir da localidade atual do sistema (no Painel de Controle do Windows).

Isso significa que no meu sistema,

Debug.Print FormatCurrency(1000)

irá imprimir $1,000.00, mas se eu executar o mesmo programa em um computador Windows configurado para a localidade do Reino Unido, ele provavelmente imprimirá £1,000.00, o que, claro, é algo completamente diferente.

Da mesma forma, você tem algum código, em algum lugar, não sei dizer onde, na Polônia, ao que parece, que é responsável por analisar a string do usuário e convertê-la em um número.E se esse código estiver no Visual Basic, novamente, ele depende do painel de controle para decidir se "". ou "," é o separador de milhares e se "," ou "". é o ponto decimal.

A função CDbl converte seu argumento em um número.Por exemplo, no meu sistema nos EUA

Debug.Print CDbl("1.200")

produz o número um ponto dois, em um sistema com o Painel de Controle configurado para formatação europeia, produziria o número mil e duzentos.

É possível que o problema seja que você tenha alguém sentado em um computador com o painel de controle regional definido para usar "." como o separador decimal, mas eles estão digitando "," como o separador decimal.

Outras dicas

Qual banco de dados você está usando?E em que tipo de dados a quantidade é armazenada?

Desde que você esteja sempre convertendo de um formato para outro, não precisa fazer a análise, apenas substitua "." com "," ou o contrário.Pode ser necessário remover também o sinal "£" se ele estiver armazenado em sua string.

Provavelmente existe uma resposta correta para lidar com objetos de cultura e coisas assim, mas a maneira mais fácil seria pegar a entrada da entrada polonesa e substituir , por ., e armazená-la em seu banco de dados como tipo "dinheiro" ou "decimal ".Se você sabe que eles (possivelmente configuráveis ​​por usuário) estão sempre inserindo números em polonês ou inglês, você pode ter uma função na qual executa todos os números de entrada para converter a string em uma variável digitada "decimal" adequada.Além disso, para fins de exibição, você pode executá-lo por meio de outra função semelhante para garantir que o usuário sempre veja o formato numérico com o qual se sente confortável.A chave aqui é alterá-lo para um decimal assim que você o obtiver do usuário e apenas alterá-lo novamente para uma string na última etapa, antes de enviá-lo ao usuário.

@KiwiBastard sim, acho que sim.Você está armazenando seu valor em um campo "(n)varchar" ou está usando um campo do tipo moeda/decimal?Se este for o caso, os símbolos de moeda e separadores serão adicionados pelo seu cliente e não haverá necessidade de substituir nada no banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top