Изменить формат номера таймера - PullRequest
0 голосов
/ 06 марта 2020

У меня есть код, подобный следующему:

private IEnumerator RunTimer(float time, int kind_of_function)
{
    var seconds = (int) time;
    while (time > 0)
    {
        yield return null;
        time -= Time.deltaTime;
        if ((int) time != seconds)
        {
            // Update the text
            seconds = (int) time;
            timerText.text = string.Format("{0:00}:{1:00}", seconds / 60, seconds % 60);
        }

        if (seconds == 0)
        {
        }
   }
}

Как изменить этот формат вывода: 0:00 Таким образом, что если бы количество секунд было двукратным git, то это выглядело бы как 00, и если это был один-ди git, то 0?

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Как сказано, используйте один из

  • #0, где

    0 означает: я определенно хочу это di git всегда
    # означает: я хочу этот di git, только если он не 0 или является значительным 0

    см. Пользовательский Numeri c Формат строки

  • D

    , что в основном означает: показывать только значащие десятичные цифры.

    Поскольку у вас есть int, вы можете даже использовать N, который обычно включает цифры после запятой

    см. Стандартный номер c Формат строки

  • Просто вообще не определяйте специальный формат.

    Что вы описываете, так это то, что происходит по умолчанию, если вы просто используете

    string.Format("{0}:{1}", seconds / 60, seconds % 60)
    

Тогда я бы предпочел $ строковую интерполяцию который, на мой взгляд, более гибкий и лучше обслуживаемый

timeText.text = $"{seconds / 60}:{seconds % 60}";

или с форматером

timeText.text = $"{seconds / 60:#0}:{seconds % 60:#0}";

Хотя, по моему скромному мнению, вы должны придерживаться того, что у вас было. Разве это не выглядит лучше?


Окей, видимо, то, что вы на самом деле хотели, не отображать минуты вообще, если есть только секунды

var minutes = seconds / 60;
if(minutes > 0)
{
    timeText.text = $"{minutes}:{seconds % 60:#0}";
}
else
{
    timeText.text = $"{seconds:#0}";
}
0 голосов
/ 06 марта 2020
private IEnumerator RunTimer(float time)
{
    var seconds = (int) time;
    while (time > 0)
    {
        yield return null;
        time -= Time.deltaTime;
        bool moreThanTenSec = time / 10 > 1;
        if ((int) time != seconds)
        {
            // Update the text
            seconds = (int) time;
            if (moreThanTenSec)
                timerText.text = string.Format("{0:00}:{1:00}", seconds / 60, seconds % 60);
            else
                timerText.text = string.Format("{0:00}:{1:0}", seconds / 60, seconds % 60);
        }

        if (seconds == 0)
        {
        }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...