You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发D&D计时工具遇计时精度及AM/PM功能故障求助

修复你的D&D计时工具问题

看起来你在这款D&D计时工具上遇到了两个典型问题:浮点数精度导致的小数混乱,以及AM/PM切换逻辑失效。我来帮你拆解问题并给出修复方案:

核心问题分析

  1. 浮点数精度陷阱:你用minutes_time += 0.01来累加分钟,但0.01在二进制浮点数体系里无法精确表示,多次累加后会出现大量冗余小数位(比如本该是0.2,结果变成0.19999999999999996),这就是你看到“大量零”的原因。
  2. AM/PM切换逻辑错误:你的切换条件是hour_time==12 and minutes_time==0,但因为浮点数精度问题,minutes_time几乎永远不会刚好等于0;更关键的是,你的分钟累加逻辑完全错了——每次time.sleep(minutes)对应的是D&D世界的1分钟,你应该给分钟加1,而不是0.01。

修复后的完整代码

import time

# 获取用户设定:现实中多少秒对应D&D的1小时
dd_hour_in_real_seconds = int(input("How many seconds is one hour in your D&D? "))
# 计算现实中多少秒对应D&D的1分钟
dd_minute_in_real_seconds = dd_hour_in_real_seconds / 60

# 初始化D&D时间参数
current_hour = 10
current_minute = 0
period = "AM"

# 持续计时循环
while True:
    # 等待对应现实时长,推进D&D时间1分钟
    time.sleep(dd_minute_in_real_seconds)
    
    current_minute += 1
    
    # 处理分钟进位到小时
    if current_minute >= 60:
        current_minute = 0
        current_hour += 1
        
        # 处理12小时制的小时循环
        if current_hour > 12:
            current_hour = 1
        
        # 切换AM/PM:当小时从11进位到12时触发
        if current_hour == 12:
            period = "PM" if period == "AM" else "AM"
    
    # 格式化输出,确保分钟是两位数字,避免小数问题
    print(f"{current_hour}:{current_minute:02d} {period}")

关键修复细节

  • 用整数替代浮点数记录分钟:完全避开浮点数精度问题,输出时用{current_minute:02d}把分钟格式化为两位数字(比如显示10:05 AM而不是10.05 AM)。
  • 修正AM/PM切换逻辑:现在会在分钟进位导致小时变为12时自动切换时段,这完全符合现实12小时制的规则(11:59 AM → 12:00 PM,11:59 PM → 12:00 AM)。
  • 优化变量命名:把模糊的hour_time、minutes_time改成current_hour、current_minute,day_time改成period,代码可读性大幅提升。
  • 规范循环写法:用Python原生的while True替代true == 1,更符合Python编码习惯。

内容的提问来源于stack exchange,提问作者FreeButtPlugs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:51:31