按照 mm.ss 格式将 INT 覆盖为十进制

本文关键字:覆盖 十进制 INT mm ss 格式 按照 | 更新日期: 2023-09-27 18:36:26

我在这里可能真的很愚蠢,但我的大脑一片空白。

我有一个滑块(使用 Int32 值),但我想使用它来选择音乐歌曲中的位置 (mm.ss)

我还想将滑块显示的值输出到其上方的标签中,以便更容易查看滑块的设置。

有人有什么建议吗?

我想尝试将 int 值转换为小数,然后除以 60。

顺便说一下,我正在用 C# 做这件事。

按照 mm.ss 格式将 INT 覆盖为十进制

int值代表什么?如果是歌曲的秒数,则应使用:

TimeSpan time = TimeSpan.FromSeconds(seconds);
string text = time.ToString(@"mm'.ss");

使用decimal将是一个非常糟糕的主意 - 具有秒数的格式与小数分钟数不同。例如,10.50 分钟作为分钟的小数部分是 10 分 30 秒,而不是 10 分 50 秒,据我所知,这就是您想要的。

TimeSpan是在 .NET 中表示持续时间的自然方式...这就是为什么这是支持以分钟和秒为单位格式化的类型。

将其

转换为十进制不会按您想要的方式显示它。例如,四分半钟将显示为 4:50,而不是 4:30。

将时间分为分钟和秒,并设置它们的格式:

int minutes = time / 60;
int seconds = time % 60;
string formatted = minutes.ToString() + ":" + seconds.ToString("00");

您应该在内部将歌曲的长度表示为秒(可以保存在 int 中)。要实际显示它,您需要song_length / 60获取分钟数(这称为整数除法,它返回结果并丢弃分数,例如 100/60 = 1 )。

之后,您可以按song_length % 60获得秒数(%是模运算符)。

编辑:没有看到 c# 标记。Jon Skeet的答案在C#中更合适。

编辑:我误解了问题的范围,但我会留下这个以防万一有帮助。

  1. 以秒为单位存储轨道的总长度。
  2. 将滑块的位置计算为最大可能滑块值的分数。
  3. 将轨道长度(以秒为单位)乘以 2 中获得的小数值)。 这给出了从轨道起点开始的偏移量(以秒为单位)。
  4. 格式化 3) 中的值以进行显示。

下面是一个人为的例子来说明这个过程:

int maxSliderValue = 100;
int sliderValue = 18;
int trackLengthInSeconds = 248;
float sliderFraction = ((float)sliderValue)/((float)maxSliderValue);
int offsetInSeconds = Convert.ToInt32(Math.Floor(trackLengthInSeconds * sliderFraction));
TimeSpan offset = TimeSpan.FromSeconds(offsetInSeconds);
string displayValue = offset.ToString(@"mm'.ss");