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 高精度計算函數