剛才客戶打電話過來說系統(tǒng)有問題,分析他發(fā)過來的日志后發(fā)現(xiàn)原來程序中用Integer.parserInt的方法把字符串形式的金額解析為整形,以前金額較小沒有發(fā)現(xiàn)問題,今天發(fā)了一筆大額交易,總金額是2150220201,正好比Integer在32位平臺(tái)上的最大值2147483647大一點(diǎn)點(diǎn),所以發(fā)生了轉(zhuǎn)換異常。
經(jīng)驗(yàn)再次提醒我們:
為了防止精度、大金額溢出等問題,禁止在涉及到金額的地方使用integer、double、float等原始類型,統(tǒng)一使用BigDecimal、BigInteger。在python中也有對(duì)應(yīng)的類型decimal類型用來進(jìn)行不限精度的。