2011-09-19 81 views
3

我有一個包含價格的變量。但是,如果它有美分,它將從價格中獲得0。如9.5美元而不是9.50美元。但如果價格是9.00美元,我想把它顯示爲9美元。變量中的PHP格式價格

分數不會經常顯示,這就是爲什麼我要保持美元短的原因,但會有奇數的情況下,我會有美分,但它只是在沒有美分時將零加到美元上。

我會如何照顧我的代碼中的兩種情況?

foreach($av as $day => $a){ 
          if(isset($price[$ro['Room']['id']][$r['Rate']['id']][$day])){ 
           $arr_total += $price[$ro['Room']['id']][$r['Rate']['id']][$day]; 
          } else { 
           $errors[] = "No Set Price for $day"; 
          } 

回答

3

可以使用:

number_format($price, !($price == (int)$price) * 2); 

實例:

$price = 9.01; 
echo number_format($price, !($price == (int)$price) * 2); 
// output: 9.01 

$price = 9.00; 
echo number_format($price, !($price == (int)$price) * 2); 
// output: 9 
+0

+1邏輯上我不確定我喜歡乘以布爾值,但是這個效果很好。 – adlawson

+0

總是可以拋出另一個'(int)'類型轉換,但沒有必要,就像你說的那樣,工作得很好,因爲它總是可以正確地轉換爲乘法。 – webbiedave

+0

這很好,謝謝,我很困惑如何滿足這兩個條件。這個代碼amy運行在Windows環境中,所以這是最好的選擇 –

0

嗯,你只是試圖通過1數相乘,我認爲可能的工作,未經測試..

+0

這將產生相同的結果作爲floatval() - 修剪0.50的0。 – jasonbar

0

當你從數據庫中獲取的價值它可能會是一個字符串,所以你只需要轉換它到一個浮點數。

floatval($price) 
+0

這將刪除任何尾隨的0「9.50」 - > 9.5 – jasonbar

3

僞僞代碼:

if ($thePrice == intval($thePrice)) 
    $thePrice = intval($thePrice); 
else 
    $thePrice = money_format('%i', $thePrice); 

money_format()

1

有幾個核心功能您可能會感興趣

  • 首先是money_format();。該功能非常適合您的需要,但不適用於Windows系統。如果你可以保證你的代碼永遠不會在Windows上使用,我會使用它。第二個是number_format();。再一次,這個功能非常適合您的需求,但有能力在Windows上工作的額外優勢。但是,它不會輸出格式化的貨幣,但您至少可以使用它來獲取小數位數。