php 关于金额的几种计算方式

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 高精度计算函数

多学、 多记、 多练、
原文地址:https://www.cnblogs.com/cyfblogs/p/9641368.html