更新!我像这样测量时间: float delta =(float)gameTime.ElapsedGameTime.TotalSeconds; 时间+ = delta;
我想格式化一个浮点数,使它看起来像这样:
minutes:seconds.milliseconds
"0:36.763"
我该怎么做?
答案 0 :(得分: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")
答案 1 :(得分: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)
答案 2 :(得分:0)
您的问题是指 TimeSpan格式。如果这些答案不够充分,您会发现使用该关键字的大量信息。 我通常使用以下方法。
float time = 75.405f;
TimeSpan TimeInSeconds = TimeSpan.FromSeconds(time);
string StringTime = TimeInSeconds.ToString(@"m\:ss\.fff");
Console.WriteLine(StringTime);
其输出为
1:15.405
您可能希望将游戏计时器存储在 float seconds 中。您可以通过指定您正在使用的格式(秒)将其转换为TimeSpan。之后,您可以使用TimeSpan的ToString()
方法使用正确的格式说明符进行转换。更多信息可以在这里找到。
https://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx
顺便说一句,我注意到你已将你的问题标记为XNA。虽然XNA在所有方面都很棒,但请记住,XNA已经过折旧,您可能需要考虑移植到MonoGame或SFML.NET。