最近忙于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 就正确了。