2012-05-23 58 views
0

我有一些數據庫的數字,我正在做一些簡單的數學。出於某種原因,我無法將總數捨去到最接近的美元。不過,我還需要包含美分信息。我確信每個itemPrice條目在數據庫中都包含兩個小數位。值不必要的圓整

if (strpos($row2["itemDiscount"],'%') !== false) { 
    $itemDiscount = $row2["itemDiscount"]; 
    $itemDetailTotalUnformatted = $row2["itemQuantity"]*($itemPrice*(1-($itemDiscount/100))); 
} 
else { 
    $itemDetailTotalUnformatted = $row2["itemQuantity"]*($row2["itemPrice"]-$row2["itemDiscount"]); 
} 
$itemDetailTotal = number_format($itemDetailTotalUnformatted, 2, '.', ''); 
echo $itemDetailTotal; 

的var_dump($ 2行):

50.00array(6) { 
[0]=> 
string(1) "2" 
"itemQuantity"]=> 
string(1) "2" 
[1]=> 
string(5) "30.00" 
[itemPrice]=> 
string(1) "30.00" 
[2]=> 
string(4) "5.00" 
[itemPrice]=> 
string(4) "5.00" 
+2

請在$ row2上做一個vardump。 –

+0

您是否嘗試將數據庫響應字段轉換爲首先浮動?從你的數據庫返回的數據將是字符串數據。 –

+0

@jon有趣的,雖然它正確地做數學,所以它絕對承認所有的數字。 – radleybobins

回答

3

當貨幣交易中,整數總是工作。以毫秒爲單位保存價格,以毫秒爲單位處理價格,只有在最後才用100除以表示結果。

其原因在於,整數具有完美的精度(達到猥褻的高值,將它們作爲浮點數處理),而浮點數則不然。 PHP中沒有定點類型。

一旦你這樣做,你的舍入問題可能會消失。

+0

謝謝,我現在就開始重新整理...但事情是,我已經把數據從數據庫中拉出來了,已經小數了......我知道這看起來很愚蠢,但也許我可以立即乘以100來解決這個問題,然後用整數處理它的其餘部分。 itemPrice和itemDiscount都在數據庫中正確顯示,它只是沒有做數學很正確。 – radleybobins

+0

在這種情況下,您需要更新數據庫以使用整數。不管是那個,還是你知道他們有兩位小數(即你使用的是一個「十進制」列),你或許可以通過'str_replace'去掉小數點。 –

+0

是的,好吧,我想我們有同樣的想法,我們在同一時間打字。我無法替換數據庫的原因是我爲已經有前端和數據庫的站點創建了一個新的後端。我有一種感覺,如果我開始編輯數據庫,我會在另一邊搞砸了。 – radleybobins