原先:
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