PHP und Geld, der Umwandlung von Geld Cent
So, ich habe getan, ein gutes Stück der Forschung auf, wie zu speichern "Geld" in eine Datenbank und ich denke, das system, das ich verwenden möchte ist
Umwandlung von Geld in CENT und die Speicherung der CENT in eine MySQL-DB mit einem Feld-Typ DECIMAL (19,4).
Meine Frage ist, WENN ich ein Eingabefeld vom user... wie gehe ich mit mehreren input-Typen.
IE:
$input = "1,346.54"
$input = "10,985.23"
$input = "110,400.50"
$input = "1033.44"
etc etc...
Was wäre die beste Methode für die Umrechnung der CENT? Als wir es zu tun haben mit "strings" und konvertieren Sie Sie in INT, und dividieren durch 100... Alles, was ich versuche, wirft Probleme wegen der "Komma" Trennung mit den zahlen.
Irgendwelche Gedanken oder Richtung wäre sehr dankbar.
- Sie sollten auch beachten, dass einige Länder/locales wechseln die Bedeutung und die position des Kommas und der Zeitraum, in zahlen: z.B. 10.985,23
- Ähnlich: stackoverflow.com/questions/5059831/parse-currency-from-string
- Hm, also deine Frage ist eigentlich so entfernen Sie das "Komma" aus dem Eingabe-strings?
- Aus Neugier, warum verwenden Sie ein
DECIMAL
Spalte konvertieren und dann alles auf Cent, so dass Sie nicht haben, um sorgen über die Fraktionen? Speichern nur den (potenziell Bruch -) dollar-Betrag in die DECIMAL-Spalte und vermeiden dieses ganze Thema... - Ich bin der Konvertierung in Cent rein für die Berechnungen die Straße runter... es ist einfacher zu berechnen, gegen die 'Cent' als ganzes, anstatt sich mit "Rundung" und andere Fragen... auf diese Weise erhalten Sie nicht Durchsickern " von Geld in obskuren Orten.
- Im Allgemeinen werden Sie entweder konvertieren Cent und speichern als INTEGER, ODER lassen Sie als Dollar und Cent, und die Speicherung als DEZIMALZAHL(13,4) angenommen, Sie wollen kompatibel bleiben mit GAAP. Ihre Entscheidung für Cent ist die richtige, aber die Entscheidung für Dezimal ist unnötig und verlieren Sie einige der Vorteile der Integer-Speicherung und-manipulation.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie es ist ein NumberFormatter-Klasse bietet eine
parseCurrency
Methode. Haben Sie einen Blick auf http://www.php.net/manual/en/numberformatter.parsecurrency.phpDem Beispiel ist
Können Sie entfernen Sie die Kommata, wie hier:
Zu diesem Zeitpunkt, können Sie konvertieren Cent durch die Umwandlung in einen float und Multiplikation mit 100. Allerdings ist dies wohl unnötig. Sie würde die potenzielle Begegnung Präzision Probleme bei der Durchführung mathematischer Operationen, sondern einfach nur die Speicherung der Werte in der Datenbank kann man in der ursprünglichen form ohne änderung des Wertes (vorausgesetzt, die DB-Tabellen gut strukturiert):
Dieser wandelt die meisten der dezimalen Währungen, um Ihre Untereinheiten.
$1,234,567.89 = 123456789
£ 1,234,567.89 = 123456789
€1.234.567,89 = 123456789
12,34 EUR = 1234
12,34 € = 1234
12,30 € = 1230
1,2 = 102
Wahrscheinlich nur entfernen Sie die ',' und den '.' aus dem string, das Ergebnis ist der Betrag in Cent.
Werden Sie wahrscheinlich benötigen, um parse den string von hinten mit strrpos ... Wenn Sie ein Komma 2 stellen, von dem Ende, so seine prob sicher davon ausgehen, dass seine ausländische Währung und das sind die CENT... Sobald Sie feststellen, dass, nutzen Sie eine regex-Streifen, die restlichen Kommas (nach dem konvertieren der "CENT" - Komma in eine Dezimalzahl natürlich) ... Jetzt haben Sie eine normale DEC-Nummer zu spielen.
Hier nach dem letzten Komma in den string ... strrpos
Verwenden Sie diese ersetzen die Kommas preg_replace
Hier ist eine hilfreiche regex-website .. regexlib