存儲(chǔ)金額到底用什么數(shù)據(jù)類型?用double陨帆,float曲秉,還是BigDecimal?看似簡(jiǎn)單的一道問(wèn)題疲牵,其實(shí)是面試中的高頻題承二。如果你回答double了,那么直接可以pass了纲爸。用double到底錯(cuò)在哪里亥鸠?下面看一個(gè)題:
double a = 0.05;
double b = 0.06;
System.out.println(b-a);
答案應(yīng)該是多少呢?是不是脫口而出0.01识啦。不是8何谩!颓哮!
結(jié)果是:
0.009999999999999995
double和float一樣都是浮點(diǎn)型家妆,浮點(diǎn)型和小數(shù)不是一樣的。
浮點(diǎn)數(shù)計(jì)算不是一個(gè)確定的值冕茅,金額計(jì)算出的值必須是準(zhǔn)確的伤极,
所以我們一般用java.math.BigDecimal。