如何将视频时长转为秒?C#播放时长计算代码问题排查
解决C#视频时长转换计算错误问题
问题说明
输入原视频时长为2.30(代表2分钟30秒)、播放速度因子为2时,现有代码输出69秒,但正确结果应为75秒;输入3.59、速度因子1.75时,代码输出122秒,正确结果应为136秒。核心问题是现有代码对输入的时长格式解析逻辑错误。
错误原因
现有代码将输入的MM.SS格式(分钟.秒)直接解析为浮点型小数分钟,比如2.30被当成2.3分钟,计算为2.3*60=138秒,导致后续计算全部错误。正确的解析逻辑应该是把小数点前的数字当作分钟,小数点后的两位数字当作秒。
修正方案
放弃直接将输入转为浮点型的方式,改为按字符串分割输入内容,分别提取分钟和秒部分,再计算总秒数。具体步骤:
- 将输入的时长字符串按小数点分割为两部分
- 第一部分转为整数分钟,第二部分补零为两位后转为整数秒
- 计算总秒数:
分钟*60 + 秒 - 按速度因子计算新时长,转换为整数类型
修正后的代码
using System; class Program { public static void Main(string[] args) { string originalTimeInput; float playbackSpeed; int originalSeconds, newSeconds; Console.WriteLine("[Fast-Forward]"); Console.Write("What is the original video time? "); originalTimeInput = Console.ReadLine(); Console.Write("What is the playback speed factor? "); playbackSpeed = float.Parse(Console.ReadLine()); // 分割MM.SS格式的输入字符串 string[] timeParts = originalTimeInput.Split('.'); int minutes = int.Parse(timeParts[0]); // 处理秒部分,确保是两位(输入2.3时自动补0为30秒) int seconds = timeParts.Length > 1 ? int.Parse(timeParts[1].PadRight(2, '0')) : 0; originalSeconds = minutes * 60 + seconds; // 计算新时长,截断小数部分转为整数 newSeconds = (int)(originalSeconds / playbackSpeed); Console.WriteLine(); Console.WriteLine("The new video time would be {0} second(s).", newSeconds); Console.WriteLine("That saves you {0} second(s) from the original video speed.", originalSeconds - newSeconds); } }
验证示例
- 输入
2.30、速度因子2:- 总秒数:
2*60+30=150 - 新时长:
150/2=75秒,与示例一致
- 总秒数:
- 输入
3.59、速度因子1.75:- 总秒数:
3*60+59=239 - 新时长:
239/1.75≈136.57,截断后为136秒,节省时长239-136=103秒,与示例一致
- 总秒数:
内容的提问来源于stack exchange,提问作者maail preston
相关产品推荐
相关产品推荐

