2016-12-03 2 views
0

Ich habe versucht, eine geldbezogene App zu erstellen, in der Benutzer ihre Währung wählen können. Mysql Datentyp Ich versuchte, ist dezimal (19,4). Jetzt ist das Problem, dass einige Währungen drei Genauigkeiten benötigen und einige brauchen zwei ZB: Oman Rial benötigt drei Genauigkeiten. dh 1000 baisa = 1 omani rial. Daher können meine Kunden 6.783 Omanial eingeben. Wo meine US-Kunden nur 2 Genauigkeiten als 100 Cent = 1 Dollar benötigen und sie können 5.50 eingeben.Mysql Datentyp für Geld

Wenn ich diese beiden Einträge in meine Datenbank mit Dezimal (19,4) einfügen, wird es als 6.7830 und 5.5000 jeweils gespeichert.

Jetzt ist der wahre Schmerz, wenn ich ihre Einträge anzeigen muss, da ich nicht diese zusätzliche 0 in omani rial Eintrag und diese 00 in US-Dollar anzeigen möchte. Ich habe auch Float versucht, aber die letzte Ziffer wird manchmal abgerundet.

Gibt es einen Mysql-Datentyp, in dem ich die exakte Eingabe speichern kann, ohne irgendwelche Abrundungen oder zusätzliche Nullen? Wenn es keinen solchen Eintrag gibt, wie kann ich es möglich machen?

Antwort

0

Sie können VARCHAR verwenden, um exakte Darstellungen zu speichern, aber ich empfehle das nicht, da es mehr Bytes benötigt, um eine Zahl als Zeichenfolge zu speichern. Und jede Arithmetik, die Sie für den Wert ausführen, wird trotzdem in eine Zahl umgewandelt.

Ich empfehle Ihnen, DECIMAL(19,4) zu verwenden, und formatieren Sie den Wert in Anwendungscode, um es mit den entsprechenden Ziffern anzuzeigen. Jede Programmiersprache hat eine Funktion wie printf(), mit der Sie die Ausgabeformatierung unabhängig von dem gespeicherten Wert steuern können.

+0

Wie kann ich die entsprechenden Ziffern verfolgen? Muss ich eine neue Spalte erstellen, um die Anzahl der Ziffern nach dem Punkt zu verfolgen. Dh muss ich 3 im Falle von 6.783 speichern? – Rishad

+1

Deklarieren Sie den Spaltentyp mit der Genauigkeit, die von der Währung verwendet wird, die die meisten Stellen der Genauigkeit erfordert. Alle anderen Währungen können diesen Datentyp ebenfalls verwenden. Ihre Anwendung müsste Logik enthalten, um die Werte je nach Währungstyp unterschiedlich zu formatieren. –

+0

Beachten Sie, dass 'DECIMAL (.., 4)' nur 1 Byte mehr als '(.., 2)' braucht, so dass es nicht viel Speicherplatz verschwendet. Ich stimme zu, dass es an der App liegt, die unerwünschten abschließenden Nullen zu entfernen. –