php 关于金额的几种计算方式
平常开始开发过程中,多多少少都会遇到点关于金额的计算,比如设置返利、提现手续费、折扣啊等等诸如此类的比例,然后再计算出之后的实际的费用。
下面,以折扣为例,来实现这类计算是如何实现的,话不多说,直接上代码!
1 //计算折扣
2 $value = '9.95';//折扣
3 $money = '39.555';//原始价格,当然到这一步的价格,一般都是小数点后两位的,此处保留三位,主要是为了对比
4 echo '原始价格:'. $money * ($value/10);
5 echo '<pre>';
6 echo '直接四舍五入:'.round($money * ($value / 10),2);
7 echo '<pre>';
8 echo '截取小数点后1位:'.floor($money * $value)/10;
9 echo '<pre>';
10 echo '截取小数点后2位'.floor($money * ($value / 10) * 100)/100;
11 die;
运行结果为:
1 价格:39.357225
2 直接四舍五入:39.36
3 截取小数点后1位:39.3
4 截取小数点后2位39.35
我一般是使用第二种和第四种,当然也可以根据自身需要,适当调整
最后是函数说明:
round():对浮点数进行四舍五入。语法:round(a,b), 默认b为0
floor(): 向下舍入为最接近的整数。即小于这个浮点数的最大整数
补充:在php运算过程中,精度运算是不可缺少的,所以是使用floor函数向下取整的时候,往往会出现bug,比如floor(0.58*10)为57,
此时可以借助php的高精度函数来解决,floor(bcmul(0.58,10))为58,,此外还有bccomp、bcadd、bcsub、bcmod、bcp、bcmul,分别代表比较、加、减、取模、除、乘法运算,具体可参考另一篇文章php 高精度计算函数