PHP заполнение целочисленных частей
Мне нужно заполнить целую часть 0, целая часть должна быть не менее 2 символов
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
5 ответов
Вы также можете использовать printf()
функции для заполнения целого числа:
Что-то вроде ( кодовая панель):
<?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);
Это будет работать только для неотрицательных чисел.
Другой:
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
Если результат, который вы ищете, 02.11
тогда попробуй sprintf()
:
sprintf("%05.2f", 02.11); // Output: 02.11
^ ^--- float precision
|--- total string length
sprintf("%07.2f", 02.11); // Output: 0002.11
Ссылки, которые могут помочь:
Дополнительные лидирующие нули при печати с плавающей запятой с использованием printf?