刚才客户打电话过来说系统有问题,分析他发过来的日志后发现原来程序中用Integer.parserInt的方法把字符串形式的金额解析为整形,以前金额较小没有发现问题,今天发了一笔大额交易,总金额是2150220201,正好比Integer在32位平台上的最大值2147483647大一点点,所以发生了转换异常。
经验再次提醒我们:
为了防止精度、大金额溢出等问题,禁止在涉及到金额的地方使用integer、double、float等原始类型,统一使用BigDecimal、BigInteger。在python中也有对应的类型decimal类型用来进行不限精度的。