2016-11-29 57 views
1

更新!我測量的時間是這樣的: float delta =(float)gameTime.ElapsedGameTime.TotalSeconds; 時間+ =增量;如何格式化浮點數以使其看起來像實時?

我想格式化浮點數,使它看起來像這樣:

minutes:seconds.milliseconds 
"0:36.763" 

Mario Kart picture

我怎樣才能做到這一點?

+0

float表示什麼值? – stuartd

+0

什麼是浮點表示 - 分,秒,毫秒或滴答聲 - 有一個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'來代替'新的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。之後,您可以簡單地使用TimeSpan的ToString()方法使用正確的格式說明符進行轉換。更多信息可以在這裏找到。

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

順便說一句,我注意到你標記爲XNA你的問題。雖然XNA在所有措施方面都非常出色,但請記住,XNA已經貶值,您可能需要考慮移植到MonoGame或SFML.NET。