我怎样才能格式化一个浮点数,让它看起来像实时的?
How can I format a float number so that it looks like real time?
更新!我这样测量时间:
浮动增量=(浮动)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")
您正在使用时间跨度,因此您可以使用 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 格式化。如果这些答案还不够,您会发现大量使用该关键字的信息。 我通常使用以下方法。
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.
更新!我这样测量时间: 浮动增量=(浮动)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")
您正在使用时间跨度,因此您可以使用 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 格式化。如果这些答案还不够,您会发现大量使用该关键字的信息。 我通常使用以下方法。
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.