LINUX.ORG.RU

perl лидирующие нули: 01, 02, 10, 11


0

0

Понадобилось сделать так, чтобы в числе (день месяца) всегда было два знака. Программист написал такое:

 $var1 = "0".$var1 if $var1 < 10; 
 $var2 = "0".$var2 if $var2 < 10; 

Мой вариант:

 $var1 = sprintf("%02i", $var1);
 $var2 = sprintf("%02i", $var2);

Мне интересно знать, заблуждаюсь ли я, считая, что вариант со sprintf лучше и почему?

Просто хочу прояснить для себя этот вопрос.

★★

Последнее исправление: name_no (всего исправлений: 1)

Ответ на: комментарий от Neksys

Исправил описание сообщения. Суть вопроса в том, какой из методов предпочтительнее и почему, а не сколько нулей добавить.

name_no ★★
() автор топика
Ответ на: комментарий от name_no

Твой вариант понятней для сишника. Да и правильнее, так как более универсальный (для большего кол-ва нулей годится).

vkos ★★
()

читаемость одинаковая. скорость - тоже. твой код трушней.

helios ★★★★★
()
Ответ на: комментарий от anonymous
if ($var == 0) {
  $var = '0' . $var;
} elsif ($var == 1) {
  $var = '0' . $var;
} elsif ($var == 2) {
  $var = '0' . $var;
...
} elsif ($var == 9) {
  $var = '0' . $var;
} else {
  $var = $var;
}

так вот наиболее удобочитаемо и понятно!

Можно легко расширить алгоритм и для двух а то и трех нулей.

;)

roller ★★★
()

во втором варианте var упоминается дважды, в первом - трижды. соответственно, если вместо var будет нечто более громоздкое (например, поле объекта или элемент массива с длинным названием), преимущество второго подхода будет очень заметно. когда самому приходилось кодить подобное, до 2-го варианта не додумался - теперь буду использовать его.

amomymous ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.