以下是最近项目中遇到的两个问题及解决方法:
1、JavaScript floor
例:XX门票的价格为1.01元/张,用户可使用优惠券金额为1元。即用户勾选使用优惠券后只需支付0.01元。
代码:
<script>
var ticketPrice = 1.01, //门票价格
couponPrice = 1, //优惠券
totalPrice; //实际支付金额
totalPrice = ticketPrice - couponPrice;
//document.write(totalPrice);
//上面运行结果为:0.010000000000000009
//显然不是我们想要的结果,所以对上面的结果做以下处理:
totalPrice = parseInt(totalPrice*100)/100;
document.write(totalPrice);//结果为0.01
</script>
2、PHP floor函数
问题:当门票价格为19.9元时,PHP程序员用floor函数来处理,结果在支付时发现金额变成了19.89元,突然少了0.01元
下面是之前PHP程序员写的代码:
<?php
//价格计算 1+,2-
function calculate($v1,$v2,$type=1) {
if($type==1){
$value=$v1+$v2;
}else{
$value=$v1-$v2;
}
$value=floor($value*100);
return $value/100;
}
?>
用floor函数,当$value值为19.9元时,其处理结果为19.89。
这里不太明白PHP程序员为啥要用floor来处理$value。
修改Bug后代码:
<?php
//价格计算 1+,2-
function calculate($v1,$v2,$type=1) {
if($type==1){
$value=$v1+$v2;
}else{
$value=$v1-$v2;
}
return round($value,2);
}
?>
改用round函数后,结果为预期值。