sprintf ничего не делает — пытается вывести как двузначное число (начальный ноль)

#php #printf

#php #printf

Вопрос:

У меня есть функция времени от секунды до секунды, и я хочу всегда выводить значения минут и секунд в виде двух цифр. Другими словами 5 , стало бы 05 . Я использовал sprintf в функции, но она ничего не делает. Значения по-прежнему возвращаются в виде однозначных цифр.

 //convert seconds to time
function convertSeconds($seconds)
{
    // extract hours
    $hours = floor($seconds / (60 * 60));

    // extract minutes
    $divisor_for_minutes = $seconds % (60 * 60);
    $minutes = floor($divisor_for_minutes / 60);

    // extract the remaining seconds
    $divisor_for_seconds = $divisor_for_minutes % 60;
    $seconds = ceil($divisor_for_seconds);

    // return the final array
    $obj = array(
        "h" => (int) $hours,
        "m" => (int) sprintf("d", $minutes),
        "s" => (int) sprintf("d", $seconds)
    );
    return $obj;
}
  

Комментарии:

1. Вы должны удалить (int) приведение типов, если хотите получить вывод в 2-значном формате

Ответ №1:

это проблема с приведением, вы sprint() используете переменные not, поэтому попробуйте

 $obj = array(
        "h" => (int)$hours,
        "m" => sprintf("d", (int)$minutes),
        "s" => sprintf("d", (int)$seconds)
    );
  

Ответ №2:

sprintf Функция правильно отформатирует число, если вы удалите приведение к целому числу:

 $obj = array(
    "h" => (int) $hours,
    "m" => sprintf("d", $minutes),
    "s" => sprintf("d", $seconds)
);
  

В десятичном представлении целое число не может начинаться с нуля (только шестнадцатеричные, восьмеричные и двоичные представления целых чисел могут начинаться с нуля).