2008-08-21 9 views
2

Ich verwalte eine App für einen Client, der an zwei Standorten verwendet wird. Einer in England und einer in Polen.Konvertierung der lokalen Währungszeichenfolge

Die Datenbank wird in England gespeichert und verwendet das Format £ 1000.00 für Währung, aber die Informationen werden lokal in Polen gesammelt, wo 1000,00 das Format ist.

Meine Frage ist, in VB6 gibt es eine Funktion, die eine Währungszeichenfolge in einem lokalen Format und konvertiert in eine andere, oder ich muss nur die Zeichenfolge analysieren und ersetzen, oder. ?

BTW Ich habe CCur angeschaut, aber nicht sicher, ob das tun wird, was ich will.

Antwort

7

Die Daten werden nicht tatsächlich als Zeichenfolge gespeichert "£1000.00"; Es ist in einem numerischen Format gespeichert.

Sidebar: Normalerweise sind Datenbanken aufgebaut Geldmengen zu speichern, unter Verwendung entweder des decimal Datentyp (auch Geld in einigen DBs genannt), oder als eine Gleitkommazahl (auch Doppel genannt).

Der Unterschied besteht darin, dass, wenn es als decimal bestimmte Zahlen wie 0,01 genau dargestellt werden, während gespeichert ist in Doppel diese Zahlen können nur etwa gespeichert werden, was zu Rundungsfehlern.

Die Datenbank erscheint die Zahl als "£1000.00" zu speichern, weil etwas ist für die Anzeige der Formatierung. In VB6 gibt es eine Funktion FormatCurrency, die eine Zahl wie 1000 nehmen und eine Zeichenfolge wie "£1000.00" zurückgeben würde.

Sie werden feststellen, dass die Funktion FormatCurrency kein Argument verwendet, das angibt, welche Art von Währung verwendet werden soll.Das liegt daran, dass es zusammen mit allen anderen länderspezifischen Funktionen in VB die Währung aus dem aktuellen Gebietsschema des Systems (in der Windows-Systemsteuerung) ermittelt.

, dass diese auf meinem System bedeutet,

Debug.Print FormatCurrency(1000)

wird $1,000.00 drucken, aber wenn ich laufe die gleiche Programm auf einem Computer mit Windows auf den britischen locale, ist es wahrscheinlich £1,000.00 gedruckt werden , was natürlich etwas völlig anderes ist.

In ähnlicher Weise, Sie haben irgendwo Code, ich kann nicht sagen, wo, in Polen, es scheint, ist verantwortlich für die Analyse der Zeichenfolge des Benutzers und die Umwandlung in eine Zahl. Und wenn sich dieser Code wieder in Visual Basic befindet, entscheidet er sich auf dem Control Panel, ob "." oder "," ist das Tausendertrennzeichen und ob "," oder "." ist der Dezimalpunkt.

Die Funktion CDbl wandelt ihr Argument in eine Zahl um. So zum Beispiel auf meinem System in den USA

Debug.Print CDbl("1.200")

der Nummer eins Punkt zwei erzeugt, auf einem System mit der Systemsteuerung auf europäische Formatierung festgelegt, würde es die Nummer eins tausend, zwei produzieren hundert.

Es ist möglich, dass das Problem darin besteht, dass Sie jemanden haben, der einen Computer mit dem regionalen Steuerungsfeld zur Verwendung von "." als Dezimaltrennzeichen, aber sie geben "," als Dezimaltrennzeichen ein.

0

Welche Datenbank verwenden Sie? Und welcher Datentyp ist die gespeicherte Menge?

Solange Sie immer von einem Format in ein anderes umwandeln, müssen Sie kein Parsing durchführen, ersetzen Sie einfach "." mit "," oder umgekehrt. Eventuell müssen Sie auch das "£" -Zeichen entfernen, wenn dies in Ihrer Zeichenkette gespeichert ist.

0

Es gibt wahrscheinlich eine korrekte Antwort, die sich mit Kulturobjekten und so verhält, aber der einfachste Weg wäre, die Eingabe von der polnischen Eingabe zu nehmen und die mit einem. Zu ersetzen und sie dann in Ihrer Datenbank als Typ "Geld" zu speichern "oder" Dezimal ". Wenn Sie wissen, dass sie (möglicherweise pro Benutzer konfigurierbar) immer Zahlen in polnischer oder englischer Sprache eingeben, könnten Sie eine Funktion haben, mit der Sie alle Eingabenummern ausführen, um die Zeichenfolge in eine richtige "dezimale" typisierte Variable zu konvertieren. Für Anzeigezwecke können Sie es auch durch eine andere ähnliche Funktion ausführen, um sicherzustellen, dass der Benutzer immer das Zahlenformat sieht, mit dem er vertraut ist. Der Schlüssel hier ist, es zu einer Dezimalzahl zu schalten, sobald Sie es vom Benutzer erhalten, und es nur zu einer Zeichenkette im letzten Schritt zurückzuschalten, bevor Sie es an den Benutzer senden.

0

@KiwiBastard ja ich würde es mir denken. Speichern Sie Ihren Betrag in einem Feld "(n) varchar" oder verwenden Sie ein Währungs/Dezimalfeld? Wenn Letzteres der Fall ist, werden die Währungssymbole und Trennzeichen von Ihrem Client hinzugefügt, und es besteht keine Notwendigkeit, irgendetwas in der Datenbank zu ersetzen.