2015-09-02 115 views
-2

我正在計算幾個數字(sales_total,service_charge)以獲得7%的GST。我得到的是帶小數點的數字。帶小數點四捨五入的PHP浮點數

實施例1:

$sales_total  = 207.50; 
$service_charge = 20.75; 

$gst    = ($sales + $sc) * .07; 

返回箱GST = 15.9775

例2:

$sales_total  = 28; 
$service_charge = 2.8; 
$gst    = ($sales + $sc) * .07; 

返回我GST = 2.156

我需要將數據與報告相符,其中

  • 例1個GST = 16.00 (我15.9775)
  • 實施例2 GST = 2.15 (我的2.156)

我想PHP輪,number_format功能,但沒有得到我的兩個結果是正確的。 Round給出示例1結果正確,number_format給出示例2正確。

我在做什麼錯誤或我需要使用哪個功能?任何幫助,建議都歡迎。我就是爲了這個。

+0

我猜'($銷售額+ $ SC)'應該是'($銷售額+ $ service_charge)'? – CD001

+3

根據你的例子,PHP給你的數學上正確的數字。另外,您的舍入規則似乎在每個示例之間都有所不同。我會試着說,鑑於提供的信息報告是狡猾的... –

+0

@ CD001你是對的..但它不是問題..它只是我分享的僞代碼.. –

回答

0

你試過:

round($gst, 2); 

這將小數點後2間房屋內圓你的變量。

你可以試試嗎?

最好的問候,

編輯:

既然你想在這兩個值不同的行爲,我不認爲這一輪可以幫助你在這兩種情況下。 其實第二個例子你甚至不想要一輪。你只是想刪除第三十進制數等等...

在這種情況下,我會用第1例的輪2樓小數的房子就像我說的,並在第二個例子中,我只想刪除第三門牌號碼或限制在數據庫中>將浮點數編號爲2個十進制小數點。

+0

我試過了......這使得例子1:'15.98'(預計16.00)和例子2:'2.16'(預計2.15) –

+0

已經編輯。我很抱歉錯過了這個問題 –

0

我相信你可能需要精確小數四捨五入爲零了,所以根據您可以使用:

$gst = sprintf("%.2f", round($gst, 3 - strlen(round($gst)), PHP_ROUND_HALF_ODD)); 

結果:

16.00 
2.16 

這顯示的精度離零點3個小數點減去舍入值的長度。您可能需要使用舍入模式和精確度來獲得它想要的結果。 2.15 from 2.156的結果看起來不正確 - 目前尚不清楚你是如何得到這個值的。

  • PHP_ROUND_HALF_UP•回合VAL達精密小數遠離零,當它走了一半。將1.5變成2 和-1.5變成-2。

  • PHP_ROUND_HALF_DOWN•回合下來VAL精密小數趨於零,當它走了一半。將1.5變爲1並將 -1.5變爲-1。

  • PHP_ROUND_HALF_EVEN•回合VAL朝着下一個偶數值精度小數。

  • PHP_ROUND_HALF_ODD•回合VAL精密小數向下一個奇數值。

參考:http://php.net/manual/en/function.round.php