我可能在这里真的很愚蠢,但我的大脑已经一片空白。
我有一个滑块(它使用 Int32 值),但我想用它来选择音乐歌曲中的位置(mm.ss)
我还想将滑块显示的值输出到其上方的标签中,以便更容易查看滑块的设置。
有人有什么建议吗?
我想尝试将 int 值转换为小数,然后除以 60。
顺便说一句,我在 C# 中这样做。
我可能在这里真的很愚蠢,但我的大脑已经一片空白。
我有一个滑块(它使用 Int32 值),但我想用它来选择音乐歌曲中的位置(mm.ss)
我还想将滑块显示的值输出到其上方的标签中,以便更容易查看滑块的设置。
有人有什么建议吗?
我想尝试将 int 值转换为小数,然后除以 60。
顺便说一句,我在 C# 中这样做。
int
值代表什么?如果是歌曲的秒数,您应该使用:
TimeSpan time = TimeSpan.FromSeconds(seconds);
string text = time.ToString(@"mm\.ss");
使用 adecimal
将是一个非常糟糕的主意 - 具有秒数的格式与小数分钟数不同。例如,作为分数的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# 中更合适。
编辑:我误解了问题的范围,但我会留下这个以防万一。
下面是一个人为的例子来说明这个过程:
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");