2011-09-19 11 views
3

私には価格を含む変数があります。ただし、セントがある場合は価格から0を取ります。 $ 9.50の代わりに$ 9.5など。しかし、価格が$ 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

これはすばらしいおかげで、私は両方の条件を満たす方法に困惑しました。このコードはWindows環境で実行されるので、これが最適なオプションです –

0

うーん、あなたは単にあなたがデータベースから値を取得するとあなただけで変換する必要があるので、それはおそらく文字列になります

+0

をこれはFLOATVALと同じ結果が得られます() - 0 0.50のトリミング。 – jasonbar

0

...テストされていない、私はそれが動作するかもしれないと思う1.で数を乗算してみてくださいそれは浮動小数点数になります。

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上で作業できるという利点があります。ただし、フォーマットされた通貨は出力されませんが、少なくとも小数点以下の桁数を得るには使用できます。