按照mm.ss格式将INT转换为十进制

时间:2012-06-07 15:58:06

标签: c# math type-conversion

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

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

我还想将滑块显示的值输出到它上面的标签,这样就可以更容易地看到滑块的设置。

有人有任何建议吗?

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

顺便说一句,我在C#中这样做。

4 个答案:

答案 0 :(得分:6)

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

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

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

TimeSpan是表示.NET中持续时间的自然方式...这就是支持formatting in minutes and seconds的类型的原因。

答案 1 :(得分:1)

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

将时间分为分钟和秒,并格式化:

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

编辑:我误解了问题的范围,但我会留下它,以防它有用。

  1. 以秒为单位存储曲目的总长度。
  2. 计算滑块的位置,作为最大滑块值的一部分。
  3. 将轨道长度(以秒为单位)乘以2)中获得的小数值。这给出了从轨道开始的偏移量,以秒为单位。
  4. 格式化3)中的值以进行显示。
  5. 这是一个人为的例子来说明这个过程:

    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");