最近忙于Fix Bug, 在某系統(tǒng)中發(fā)現(xiàn)一個(gè)Bug,而這個(gè)Bug竟然從2004年就存在!! 有這么一個(gè)Scenerio:
周期性轉(zhuǎn)賬,計(jì)算需要轉(zhuǎn)賬次數(shù) eg: 200 每次20 那么 轉(zhuǎn)賬次數(shù)=10 239 每次轉(zhuǎn) 23.9 轉(zhuǎn)賬次數(shù)=10
代碼1:
float sumTranferAmount;
float perTransferAmount;
transactionCount = (int)Math.ceil((Math.round((sumTRanferAmount/perTransferAmount)*100.0) / 100.0))
代碼2:
float sumTranferAmount;
float perTransferAmount;
int transactionCount = (int)(sumTranferAmount / perTransferAmount);
if ( (sumTranferAmount) % (perTransferAmount) != 0){
transactionCount++;
}
這兩段代碼那個(gè)正確呢? 大家不要測(cè)試,看能不能找出問題?
其實(shí)這兩個(gè)代碼都是錯(cuò)誤的。
代碼1不要說,錯(cuò)到十萬八千里了。對(duì)于代碼2,其實(shí)在取余運(yùn)算出現(xiàn)了問題。取余運(yùn)算前提是這兩個(gè)數(shù)不是小數(shù)(金額都是保留兩位小數(shù))。
只要讓sumTranferAmount*100%pertransferAmount*100 就正確了。