数学.圆形问题

本文关键字:问题 数学 | 更新日期: 2023-09-27 18:26:16

我正在为我的游戏创建一个时钟。我的小时和秒都是浮点值,所以我用的是数学。四舍五入将它们四舍五舍五入到最接近的整数。问题是"小时"answers"秒"变量根本没有改变。我在用数学吗?四舍五入错了吗?

public void Update()
    {
        Hours = (float)Math.Round(Hours, 0);
        ClockTime = Hours + ":" + Seconds;
        if (Hours >= 24)
            Hours = 0;
        if (Seconds >= 60)
            Seconds = 0;
    }

在我的日间/夜间课程的更新方法中。

        float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
        clock.Hours += (float)elapsed;
        clock.Update();

当我在屏幕上打印数字时,没有任何变化。如果我去掉对Math.Round的(float)转换,我会得到一个错误,无法将double转换为float。

数学.圆形问题

在这种情况下不要使用浮点,绝对没有理由让一小时、一分钟或一秒是非积分的。

几乎可以肯定的是,尽管你认为你在四舍五入,但你最终会得到59.9999这样的浮点值。

假设浮点值的精度比实际值高确实存在危险

如果你把你的秒数保持在一个无符号的32位整数类型中,你可以表示从现在到公元2150年的经过时间,如果当时有人还在玩你的游戏:-)

然后,你只需使用整数计算来计算小时和秒(假设你对分钟不感兴趣,就像现在的情况一样),伪代码如:

hours = elapsed_secs / 3600
secs = elapsed_secs % 3600
print hours ":" seconds

除了这些建议之外,你所做的似乎有点奇怪。您正在向小时变量中添加一个逝去的秒字段(我假设您选中了该字段,但该字段并不总是设置为零)。这将使游戏变得有点困难,因为时间的速度是正常速度的3.5倍。

实际上,您应该使用DateTime来跟踪您的时间,并使用DateTime属性来正确获取小时和秒,而不是使用float来尝试秒和小时。DateTime是基于长的,支持从几毫秒到几千毫秒,当然还有几秒。它内置了所有功能,可以添加毫秒、年、秒或。。。正确,这实际上相当困难。