更新!我測量的時間是這樣的: float delta =(float)gameTime.ElapsedGameTime.TotalSeconds; 時間+ =增量;如何格式化浮點數以使其看起來像實時?
我想格式化浮點數,使它看起來像這樣:
minutes:seconds.milliseconds
"0:36.763"
我怎樣才能做到這一點?
更新!我測量的時間是這樣的: float delta =(float)gameTime.ElapsedGameTime.TotalSeconds; 時間+ =增量;如何格式化浮點數以使其看起來像實時?
我想格式化浮點數,使它看起來像這樣:
minutes:seconds.milliseconds
"0:36.763"
我怎樣才能做到這一點?
你的問題是模糊之一,提供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")
@MickyD:我看到'f3'格式的字符串不是最好的選擇;但'00.000'會做 –
更好的先生。 +1 :) – MickyD
您正在使用的時間跨度,所以你可以使用一個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)
這是最好的方法 - 使用專門爲此目的設計的類;應該使用'TimeSpan.FromSeconds'來代替'新的TimeSpan(...)' –
@DmitryBychenko好的一點,我只是在改變它。 :) –
你的問題是指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。
float表示什麼值? – stuartd
什麼是浮點表示 - 分,秒,毫秒或滴答聲 - 有一個DateTime構造函數或方法可將該值轉換爲DateTime。然後可以使用適當格式的'ToString()'方法來獲得所需的輸出。 – ChrisF