背景:在與銀行的項目對接中,近期客戶反饋支付失敗,錯誤信息是:“付款金額格式有問題”,經(jīng)過日志分析,發(fā)現(xiàn)客戶系統(tǒng)發(fā)送銀行系統(tǒng)時,付款金額以科學計數(shù)法的形式傳遞參數(shù)。
重現(xiàn):
public static void main(String[] args) {
double amount = 13000000d;
System.out.println("付款金額:"+amount);
}
//運行結(jié)果:
付款金額:1.3E7
經(jīng)過測試發(fā)現(xiàn),浮點數(shù)(double、float)當整數(shù)部分超過7位以上(不含7位),就會自動轉(zhuǎn)為科學計數(shù)法顯示。
解決:可以轉(zhuǎn)換為BigDecimal文章來源:http://www.zghlxwxcb.cn/news/detail-596228.html
public static void main(String[] args) {
double amount = 13000001f;
BigDecimal result = new BigDecimal(String.valueOf(amount)); //特別注意當構(gòu)造參數(shù)類型為double時結(jié)果有一定的不可預知性,可能會出現(xiàn)new BigDecimal(0.1)所創(chuàng)建的BigDecimal正好等于0.1,但實際等于0.100000000000005……的情況(具體可進一步自查了解),所以請轉(zhuǎn)換為String構(gòu)造方法
System.out.println("付款金額:"+result);
}
//運行結(jié)果
付款金額:13000001
至此,便可解決浮點數(shù)在數(shù)據(jù)傳輸過程中出現(xiàn)科學計數(shù)法的情況!文章來源地址http://www.zghlxwxcb.cn/news/detail-596228.html
到了這里,關(guān)于日常踩坑:Java中double類型出現(xiàn)科學計數(shù)法問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!