原先:
if ($redpacket['haspwd'] && $pwd != $redpacket['pwd']) {
$openCount = Redis::incrMemberRedpacketOpencount($this->userid, $id);
$leftCount = 10 - $openCount;
if ($leftCount > 0) {
$this->returnError(300, '口令錯誤,還剩' . $leftCount . "次機會");
} else {
$this->returnError(300, '口令錯誤');
}
}
修正後
if ($redpacket['haspwd']) {
if (Redis::getMemberRedpacketOpencount($this->userid, $id) >= 10) {
$this->returnError(300, '打開次數已超過限制');
}
if ($pwd != $redpacket['pwd']) {
$openCount = Redis::incrMemberRedpacketOpencount($this->userid, $id);
$leftCount = 10 - $openCount;
if ($leftCount > 0) {
$this->returnError(300, '口令錯誤,還剩' . $leftCount . "次機會");
} else {
$this->returnError(300, '口令錯誤');
}
}
}
原先會造成 10次後 輸入正確密碼也能進入下面邏輯
php 在 兩數相減的結果可能會有多位小數,
可以採用下面處理:
$money = floatval(number_format(($amount - $paybalance), 2, '.', ''));
二位數想減一定是二位數嗎?
php 中: 2.01-2 = 0.0099999999999998
2.21-2.2=0.0099999999999998
肉眼看來相減是0.01 並且小數點第二位是1 相減得出的是0.00999999
2.2-2.1=0.1
2.02-2=0.02
$price=69.1;
$count=100;
$total=$price*$count-6910;
echo $total;
$int = 0.58;
var_dump(intval($int * 100));
輸出的是0.57
在浮點數裏面 0.58是被視爲.57999999999999999999999……9999無限接近0.58