2011-02-09 66 views
6

我在一個項目中有一些PHP代碼,我正在使用PHP的循環函數。在我的本地主機上,我沒有在我的模式參數中包含任何引號,只是將它表示爲PHP_ROUND_HALF_DOWN。然而,推到我的服務器時,我收到錯誤消息:PHP未定義常量PHP_ROUND_HALF_DOWN

Use of undefined constant PHP_ROUND_HALF_DOWN - assumed 'PHP_ROUND_HALF_DOWN' 
Warning (2): Wrong parameter count for round() [APP/views/helpers/time_left.php, line 14] 

現在,當我的單引號添加到mode參數,第一個錯誤消失,但「錯誤的參數計數」仍然存在。我打電話的功能如下:

$days = round(($difference/$day), 0, PHP_ROUND_HALF_DOWN); 

感謝您的任何和所有幫助!

+0

參見[我企圖在一個典型答案此錯誤信息的原因(http://stackoverflow.com/questions/2941169/what-does-the-php-error-message-notice-use -of-未定義常數均值/ 8025500#8025500)。 – 2011-11-06 06:46:32

回答

9

rounding mode是在PHP 5.3中添加的。確保你至少運行了該版本。

你可以看到哪個版本你把下列的PHP文件運行:

var_dump(phpversion()); 
11

mode參數只是added in PHP 5.3.0.如果你運行PHP的早期版本,那麼模式選項常數(PHP_ROUND_HALF_UP,PHP_ROUND_HALF_DOWN,PHP_ROUND_HALF_EVEN和PHP_ROUND_HALF_ODD)將不會被定義

編輯

不能使用mode參數爲RO UND()5.3.0版本之前,但你可以通過組合實現的功能相當於:

round(floor($value * 100)/100,2); // to round down to 2dp 
round(floor($value * 1000)/1000,3); // to round down to 3dp 
round(ceil($value * 100)/100,2); // to round up to 2dp 
+0

有沒有辦法仍然使用模式參數?謝謝! – Eric 2011-02-09 17:38:16

2

你的服務器上運行着什麼版本的PHP?根據the docs只有PHP 5.3或更高版本支持PHP_ROUND常量。

2

PHP_ROUND_HALF_DOWN支持您的版本?

According to the documentation模式wasnt介紹,直到5.3

5.3.0 The mode parameter was introduced. 

(如果你想要去的其他方式或ceil)在PHP 5.3中加入

0

$模式

檢查您可以使用floor代替php的版本:

php -v 

編輯: 或使用PHP的phpinfo()函數的程序

歡呼

3

輪()默認使用PHP_ROUND_HALF_UP但你只能改變它在PHP> = 5.3.0

爲了模擬PHP_ROUND_HALF_DOWN我想你可以在舍入前減去(1/10 ^(precision + 1))* 5。

簡單地說;

<?php 
    $number=20.005; 
    $precision=2; 
    echo round($number,$precision);       //20.01 
    echo round($number-(1/10^($precision+1))*5,$precision); //20.00 
    echo round($number-0.005,2);       //20.00 
?>