【问题标题】:unity c# Mathf.FloorToInt(-0.5) returns 0 (acts like Mathf.CielToInt)unity c# Mathf.FloorToInt(-0.5) 返回 0(行为类似于 Mathf.CielToInt)
【发布时间】:2016-07-30 09:04:53
【问题描述】:

这是Mathf.FloorToInt 的脚本参考文档如您所见,它应该将 -0.5 向下舍入为 -1。出于某种原因,当与我的计算一起使用时,它似乎将其返​​回为 0。

我有两个版本的相同功能,它们以非常相似的方式工作,但输出不同。我的代码只会向这些函数提交 3 到 18 之间的整数。

这个版本就像使用 Mathf.CielToInt 一样(在 statRoll = 9 的情况下返回 0):

    public int getBonus(int statRoll)
{
    int result = Mathf.FloorToInt((statRoll - 10) / 2);
    return result;
}

这是有效的版本(在 statRoll = 9 的情况下返回 -1):

    public int getBonus(int statRoll)
{
    float initial = statRoll - 10;
    float divided = initial / 2;
    int result = Mathf.FloorToInt(divided);
    return result;
}

【问题讨论】:

  • 你的简单问题是在c#中,对于像“7”和“2”这样的浮点常量,你必须写7f2f。就这么简单

标签: c# unity3d floor math-functions


【解决方案1】:

你正在被整数除法所困扰。 statRoll10 都是 int 类型,这使得 initial 实际上是 int

你的第一个代码相当于

public int getBonus(int statRoll)
{
    int initial = statRoll - 10;
    int devisor = 2;
    int divided = initial / devisor;
    float castDevided = (float)divided
    int result = Mathf.FloorToInt(castDevided);
    return result;
}

当您执行-1 / 2 时,您有两个整数,这将计算为0 而不是-0.5,因为结果也必须是一个整数。解决此问题的方法是将两个值之一设为float

public int getBonus(int statRoll)
{
    int result = Mathf.FloorToInt((statRoll - 10) / 2f); //adding f after a number makes it a float
    return result;
}

这使得intfloat 之间的划分产生一个浮点数。类似的代码是

public int getBonus(int statRoll)
{
    int initial = statRoll - 10;
    float devisor = 2f;
    float divided = initial / devisor ;
    int result = Mathf.FloorToInt(divided);
    return result;
}

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多