网页游戏时间计算器的时分秒自动进位处理方案咨询
解决时间进位问题的方案
嘿,我明白你现在的困扰——当时间值翻倍后,分钟和秒超上限了对吧?别担心,咱们只需要加一个**时间标准化(进位处理)**的逻辑,就能把超范围的数值自动转到上一级单位里。
核心思路
按照从最小单位到最大单位的顺序处理进位,确保每一级都符合规则:
- 先处理小数秒:如果超过999,把多余的部分转成秒(因为1000小数秒=1秒)
- 再处理秒:超过60的部分转成分钟
- 最后处理分钟:超过60的部分转成小时
- 小时可以是任意正整数,不需要再进位
修改你的代码
首先在Timer类里添加一个专门处理进位的方法:
private void NormalizeTime() { // 1. 处理小数秒进位到秒 int extraSecondsFromDec = print_Decimal / 1000; print_Decimal = print_Decimal % 1000; // 2. 处理秒进位到分钟 printSecond += extraSecondsFromDec; int extraMinutesFromSec = printSecond / 60; printSecond = printSecond % 60; // 3. 处理分钟进位到小时 printMinut += extraMinutesFromSec; int extraHoursFromMin = printMinut / 60; printMinut = printMinut % 60; // 4. 累加额外的小时(小时无上限) printHour += extraHoursFromMin; }
然后修改你的Print方法,在计算翻倍后调用这个进位方法:
public void Print() { // 先计算翻倍后的值(直接赋值,避免多次调用Print时重复累加) printHour = Hour * 2; printMinut = Minut * 2; printSecond = Second * 2; print_Decimal = _Decimal * 2; // 调用进位处理,把数值转成合规格式 NormalizeTime(); Console.WriteLine("In {0}:{1}:{2}:{3}", printHour, printMinut, printSecond, print_Decimal); }
测试你的示例
输入Hour:150、Min:35、Sec:40、Dec:105,翻倍后初始值是300:70:80:210,经过进位处理后:
- 小数秒210 < 999,无需进位
- 秒80 → 80÷60=1分钟,剩余20秒
- 分钟70+1=71 →71÷60=1小时,剩余11分钟
- 小时300+1=301
最终输出就是301:11:20:210,完全符合你的要求!
额外提示
如果你的Combined方法里也需要处理时间相关的进位逻辑,也可以复用这个NormalizeTime的思路,只要把对应的数值按同样的步骤处理就行。
内容的提问来源于stack exchange,提问作者Undead Space
相关产品推荐
相关产品推荐

