2016-11-29 2 views
1

Обновление! Я измеряю время следующим образом: float delta = (float) gameTime.ElapsedGameTime.TotalSeconds; время + = дельта;Как я могу форматировать число с плавающей точкой, чтобы оно выглядело как в реальном времени?

Я хочу форматировать число с плавающей запятой, так что это выглядит следующим образом:

minutes:seconds.milliseconds 
"0:36.763" 

Mario Kart picture

Как я могу это сделать?

+0

Какое значение представляет значение float? – stuartd

+0

Что представляет собой float - минуты, секунды, миллисекунды или тики - есть конструктор или метод DateTime, который преобразует это значение в 'DateTime'. Затем вы можете использовать метод 'ToString()' с соответствующим форматированием для получения желаемого результата. – ChrisF

ответ

2

Ваш вопрос расплывчатым один, при условии, что float содержит секунд, например,

float time = 156.763122f; // 2 minutes (120 seconds) and 36.763122 seconds 

Вы можете поставить (C# 6.0)

string result = $"{(int)time/60}:{time%60:00.000}"; 

Или

string result = string.Format(CultureInfo.InvariantCulture, 
    "{0}:{1:00.000}", (int)time/60, time % 60); 

лучший подход, однако, заключается в использовании TimeSpan, который был разработан для этой цели:

TimeSpan ts = TimeSpan.FromSeconds(time); 

String result = ts.ToString("m\\:ss\\.fff") 
+0

@MickyD: Я вижу, строка формата 'f3' - не самый лучший вариант; но '00.000' будет делать –

+0

Гораздо лучше, хороший сэр. +1 :) – MickyD

2

Вы используете промежуток времени, так что вы можете использовать TimeSpan объект и использовать его пользовательское форматирование:

var timeSpan = TimeSpan.FromSeconds(36.763); 
Console.WriteLine(timeSpan.ToString("m\\:ss\\.fff")); 

Это выходы: 0:36.763

m спецификатора обозначает одной цифры минут, ss обозначает двойным цифр и .fff обозначает три десятичных знака миллисекунд.

\\: является последовательность для : и \\. является последовательность для ..

Вы также можете написать строку пользовательского формата как @"m\:ss\.fff"

Вы также можете указать дни, часы, минуты, секунды и миллисекунды отдельно, если вам посчастливилось иметь интервал представлен таким образом:

var timeSpan = new TimeSpan(0, 0, 0, 36, 763); // (days, hours, mins, secs, ms) 
+1

Это лучший способ - использовать класс, специально предназначенный для этой цели; возможно, 'TimeSpan.FromSeconds' следует использовать вместо' new TimeSpan (...) ' –

+0

@DmitryBychenko Да, хороший момент, я просто менял это. :) –

0

Ваш вопрос относится к Форматирование TimeSpan. Если этих ответов недостаточно, вы найдете много информации, используя это ключевое слово. Обычно я использовал следующий подход.

float time = 75.405f; 
TimeSpan TimeInSeconds = TimeSpan.FromSeconds(time); 
string StringTime = TimeInSeconds.ToString(@"m\:ss\.fff"); 

Console.WriteLine(StringTime); 

Выход которого

1:15.405 

Вы, вероятно, хотите сохранить таймер игры в флоат секунд. Вы можете преобразовать его в TimeSpan, указав, из какого формата вы используете (в секундах).После этого вы можете просто преобразовать с помощью метода ToString() TimeSpan с правильными спецификаторами формата. Более подробную информацию можно найти здесь.

https://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx

Кстати, я заметил, вы добавили на вопрос, как XNA. В то время как XNA является фантастическим по всем показателям, имейте в виду, что XNA обесценивается, и вы можете рассмотреть перенос на MonoGame или SFML.NET.