如何格式化浮点数以使其看起来像实时?

时间:2016-11-29 13:30:06

标签: c# xna

更新!我像这样测量时间: float delta =(float)gameTime.ElapsedGameTime.TotalSeconds; 时间+ = delta;

我想格式化一个浮点数,使它看起来像这样:

minutes:seconds.milliseconds
"0:36.763"

Mario Kart picture

我该怎么做?

3 个答案:

答案 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。