【问题标题】:if statement float not returning results Unity3d JS/USif 语句浮动不返回结果 Unity3d JS/US
【发布时间】:2015-08-02 18:28:02
【问题描述】:

我有一个 if 语句,用于检查随时间增加的浮点数(它是一个计时器)当前代码是这样的

if (Day.DateTime == 1080){
    ClientsTaken = Random.Range(MinNoOfClients, MaxNoOfClients);
    GameObject.Find("Canvas").GetComponent(Brothel).Money += (ClientsTaken *(Cost * GirlMorale));
    ClientsSeen += ClientsTaken;
    Debug.Log("Clients taken = " + ClientsTaken);
} 

计时器肯定会达到 1080,但什么也没有发生。我也尝试了 1080f,但结果相同。

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: unity3d unityscript


    【解决方案1】:

    不推荐以这种方式比较浮点变量,因为“浮点不精确” - 浮点变量内部存储在 PC 上的方式。

    相反,您可以使用Mathf.Approximately(),如下所示:

    if (Mathf.Approximately(Day.DateTime, 1080.0))
    {
        ...
    {
    

    【讨论】:

    • 谢谢,帮了大忙。但是我现在有一个新问题,每次 Day.DateTime 为 1080 时都需要调用这段代码(并且在其他几次)我设置了 6 个不同的 if 语句(唯一的区别是时间)前3个似乎工作正常,但其他人则不行。我想我需要一个 for 循环?但我不确定如何根据我想要实现的目标进行设置。有任何想法吗?谢谢
    • @shane2243 要回答这个问题,我们需要更多信息。你在某处有可用的代码吗?也许您可以粘贴整个班级here。 Day.DateTime 究竟是如何增加的?您需要在什么时候发生这种情况?
    • 这是函数pastebin.com/rhHPTVdZ 你会注意到里面有一些布尔值,这些是我尝试使用布尔值让它工作时的剩余代码,所以请随意忽略它们(并认为它们已删除) Day.DateTime 在 Day 的更新中增加,使用这条线 E"DateTime += TimeIncRate * Time.deltaTime;" DateTime 和 TimeIncRate 一样是浮点数。 TimeIncRate 也设置为 1。我需要它发生在 1080、1170、1260、1350、0 和 90。计时器在 1440 处循环返回到 0。我希望我给了你足够的继续编辑:我也刚刚注意到第 11 行的错字,应该和第 3 行一样
    • @shane2243 你真的需要在每次更新中增加 DateTime 吗?如果每秒(甚至可能每 10 秒左右)增加计时器就足够了,我会使用InvokeRepeating,比如this(请原谅任何错误,我是 C# 用户)。然后,您可以使用整数而不是浮点数。至于你的 IF 语句,我需要再考虑一下。
    • 谢谢,我只把它放在更新功能中,因为我不知道怎么做。 InvokeRepeating 函数似乎是个好主意,所以我一定会尝试一下。在第 10 行中,您不能解释 0、1 部分的作用吗?我假设 1 是多久一次?每1秒?谢谢
    【解决方案2】:

    我会将支票更改为Day.DateTime >= 1080。在处理浮点数时,您可能不会直接使用整数值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2021-04-14
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      相关资源
      最近更新 更多