Question

Je gère une application pour un client qui est utilisée à deux endroits.Un en Angleterre et un en Pologne.

La base de données est stockée en Angleterre et utilise le format 1 000,00 £ pour la devise, mais les informations sont collectées localement en Pologne, où le format 1 000,00 est le format.

Ma question est la suivante : dans VB6, existe-t-il une fonction qui prend une chaîne de devise dans un format local et la convertit en un autre, ou dois-je simplement analyser la chaîne et la remplacer, ou .?

BTW, j'ai regardé CCur, mais je ne sais pas si cela fera ce que je veux.

Était-ce utile?

La solution

Les données ne sont pas réellement stockées sous forme de chaîne "£1000.00";il est stocké dans un format numérique.

Barre latérale : Habituellement, les bases de données sont configurées pour stocker des sommes d'argent en utilisant soit le décimal type de données (également appelé argent dans certains DB), ou sous forme de nombre à virgule flottante (également appelé double).

La différence est que lorsqu'il est stocké sous décimal certains nombres comme 0,01 sont représentés exactement alors que dans double ces nombres ne peuvent être stockés qu'approximativement, ce qui provoque des erreurs d'arrondi.

La base de données apparaît stocker le numéro comme "£1000.00" parce que quelque chose le formate pour l'affichage.En VB6, il y a une fonction FormatCurrency ce qui prendrait un nombre comme 1000 et renverrait une chaîne comme "£1000.00".

Vous remarquerez que le FormatCurrency la fonction ne prend pas d’argument spécifiant le type de devise à utiliser.En effet, ainsi que toutes les autres fonctions spécifiques aux paramètres régionaux de VB, détermine la devise à partir des paramètres régionaux actuels du système (à partir du Panneau de configuration Windows).

Cela signifie que sur mon système,

Debug.Print FormatCurrency(1000)

imprimera $1,000.00, mais si j'exécute le même programme sur un ordinateur Windows configuré avec les paramètres régionaux du Royaume-Uni, il s'imprimera probablement £1,000.00, ce qui, bien sûr, est quelque chose de complètement différent.

De même, vous avez du code, quelque part, je ne sais pas où, en Pologne, semble-t-il, qui est chargé d'analyser la chaîne de l'utilisateur et de la convertir en nombre.Et si ce code est dans Visual Basic, encore une fois, il s'appuie sur le panneau de configuration pour décider si "." ou "," est le séparateur de milliers et si "," ou "." est le point décimal.

La fonction CDbl convertit son argument en nombre.Donc par exemple sur mon système aux USA

Debug.Print CDbl("1.200")

produit le numéro un point deux, sur un système avec le panneau de configuration réglé sur le formatage européen, il produirait le numéro mille deux cents.

Il est possible que le problème soit que quelqu'un soit assis un ordinateur avec le panneau de configuration régional pour utiliser "." comme le séparateur décimal, mais ils tapent "" comme séparateur décimal.

Autres conseils

Quelle base de données utilisez-vous ?Et dans quel type de données le montant est-il stocké ?

Tant que vous vous convertissez toujours d'un format à un autre, vous n'avez pas besoin de faire l'analyse, remplacez simplement "." avec "," ou l'inverse.Vous devrez peut-être également supprimer le signe "£" s'il est stocké dans votre chaîne.

Il existe probablement une réponse correcte concernant les objets de culture et autres, mais le moyen le plus simple serait de prendre l'entrée de l'entrée polonaise et de remplacer le , par un ., puis de le stocker dans votre base de données sous le type "argent" ou "décimal". ".Si vous savez qu'ils (éventuellement configurables par utilisateur) saisissent toujours des nombres en polonais ou en anglais, vous pouvez avoir une fonction par laquelle vous exécutez tous les nombres saisis pour convertir la chaîne en une variable typée "décimale" appropriée.De plus, à des fins d'affichage, vous pouvez l'exécuter via une autre fonction similaire pour garantir que l'utilisateur voit toujours le format numérique avec lequel il est à l'aise.La clé ici est de le passer en décimal dès que vous l'obtenez de l'utilisateur, et de le rebasculer en chaîne uniquement à la dernière étape avant de l'envoyer à l'utilisateur.

@KiwiBastard oui, je le pense.Stockez-vous votre montant dans un champ "(n)varchar" ou utilisez-vous un champ de type devise/décimal ?Si tel est le cas, les symboles monétaires et les séparateurs sont ajoutés par votre client, et il ne sera pas nécessaire de remplacer quoi que ce soit dans la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top