2011-09-19 6 views
3

가격이 포함 된 변수가 있습니다. 그러나 센트가 있으면 가격에서 0을 취합니다. $ 9.50 대신에 $ 9.5와 같은. 하지만 가격이 $ 9.00이라면 $ 9로 표시하고 싶습니다.변수의 PHP 형식 가격

센트가 자주 표시되지 않기 때문에 제가 금액을 짧게 유지하고 싶지만 센트가있을 것이라는 이상한 사례가 있지만 센트가없는 경우 달러에 0을 추가합니다.

내 코드에서 두 시나리오를 어떻게 맞추겠습니까?

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

음 당신은 단순히 내가 그 일을 할 수 안된 THINK (1)에 의해 수를 곱한 시도 ..

+0

을이 floatval 같은 결과를 얻을 것입니다() - 0 0.50의 트리밍. – jasonbar

0

를 데이터베이스에서 값을 얻을 때 당신은 그냥 변환해야합니다 그래서 아마 문자열입니다 그것을 floting point number로 바꾼다.

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에서 작업 할 수있는 장점이 있습니다. 그러나 형식화 된 통화를 출력하지는 않지만 최소한 소수점 이하 자리를 가져올 수는 있습니다.