最近忙于Fix Bug, 在某系統中發現一個Bug,而這個Bug竟然從2004年就存在!! 有這么一個Scenerio:
周期性轉賬,計算需要轉賬次數 eg: 200 每次20 那么 轉賬次數=10 239 每次轉 23.9 轉賬次數=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++;
}
這兩段代碼那個正確呢? 大家不要測試,看能不能找出問題?
其實這兩個代碼都是錯誤的。
代碼1不要說,錯到十萬八千里了。對于代碼2,其實在取余運算出現了問題。取余運算前提是這兩個數不是小數(金額都是保留兩位小數)。
只要讓sumTranferAmount*100%pertransferAmount*100 就正確了。