Заполнение целочисленной части PHP

Мне нужно заполнить целочисленную часть с помощью 0, целая часть должна быть не менее двух символов

str_pad( 2 ,2,"0",STR_PAD_LEFT);// 02 -> works str_pad( 22 ,2,"0",STR_PAD_LEFT);// 22 -> works str_pad( 222 ,2,"0",STR_PAD_LEFT);// 222-> works str_pad( 2. ,2,"0",STR_PAD_LEFT);// 2. -> fails -> 02. or 02 str_pad( 2.11 ,2,"0",STR_PAD_LEFT);// 2.11-> fails -> 02.11 

Есть ли для этого простой код?

Если возможно, то же самое в Java, пожалуйста

 double x=2.11; String.format("%02d%s", (int) x, String.valueOf(x-(int) x).substring(1)) 

не только некрасиво, но и печатает 02.10999999999999988

редактирование для Java: целочисленная часть Java

Вы также можете использовать printf() для ввода целого числа:

Что-то вроде ( codepad ):

 <?php function pad($n) { $n = explode('.', (string)$n); if (2 === count($n)) { return sprintf("%02d.%d\n", $n[0], $n[1]); } return sprintf("%02d\n", $n[0]); } foreach (array(2, 22, 222, 2., 2.11) as $num) { echo pad($num); } // returns 02, 22, 222, 02, 02.11 

Нет, нет простого способа.

 function padIntegerPart($n, $len) { $intPart = (int)$n; return str_repeat('0', max(0, $len - 1 - floor(log($intPart, 10)))) . $n; } 

Быстрое решение: http://codepad.org/EXcbqGos

 $num = 2.11; echo str_pad( floor($num) ,2,"0",STR_PAD_LEFT).substr($num-floor($num), 1); 

Он будет работать только для неотрицательных чисел.

Если вы хотите найти результат 02.11 , попробуйте sprintf() :

 sprintf("%05.2f", 02.11); // Output: 02.11 ^ ^--- float precision |--- total string length sprintf("%07.2f", 02.11); // Output: 0002.11 

Ссылки, которые могут помочь:

http://us2.php.net/sprintf

Дополнительные начальные нули при печати float с использованием printf?

Еще один :

 function my_str_pad ($input ,$pad_length, $pad_string) { $pad_length += strlen($input) - strlen(intval($input)); return str_pad($input, $pad_length, $pad_string, STR_PAD_LEFT); } 

Следующий тест:

 str_pad(2., 2, "0", STR_PAD_LEFT);// 2. -> fails -> 02. or 02 

Сбой, потому что str_pad работает над строкой, но вы ввели число с десятичной запятой, но без десятичной части, поэтому оно рассматривается как целое число. Если вы хотите сохранить '.' используйте вместо этого следующее:

 str_pad("2.", 2, "0" , STR_PAD_LEFT);// 2. -> works