Flutter集成Stripe传入小数金额报错parameter_invalid_integer
解决Flutter调用Stripe Payment Intent时小数金额报错的问题
Stripe的Payment Intent接口对amount参数有明确要求:必须传入对应货币最小单位的整数值,而非常规的小数金额。比如你要收16.99元人民币(或美元),实际需要传入的是1699(因为1元=100分),直接传16.99就会触发你遇到的parameter_invalid_integer错误。
解决步骤:
- 确认货币最小单位:绝大多数货币(人民币、美元、欧元等)的最小单位是"分",需将原金额乘以100转换为整数;少数货币(如日元)无分单位,直接传入原金额整数即可。
- Flutter中安全转换金额:
注意直接浮点运算可能出现精度问题(比如16.99 * 100可能得到1698.9999999999998),推荐两种稳妥方式:- 用
round()方法处理浮点值:double originalPrice = 16.99; int stripeAmount = (originalPrice * 100).round(); - 转为字符串后移除小数点(适合从接口/数据库读取的字符串金额):
String originalPriceStr = "16.99"; int stripeAmount = int.parse(originalPriceStr.replaceAll('.', ''));
- 用
- 调用接口传入转换后的整数:将得到的
stripeAmount作为Payment Intent的amount参数传入,即可正常发起请求。
内容的提问来源于stack exchange,提问作者Freaked Out
相关产品推荐
相关产品推荐

