2

这是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;
}
4

1 回答 1

4

你得到了整数除法。两者都是类型statRoll,这实际上是一个.10intinitialint

您的第一个代码相当于

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;
}

int这使得 a和 a之间的划分float导致浮动。类似的代码是

public int getBonus(int statRoll)
{
    int initial = statRoll - 10;
    float devisor = 2f;
    float divided = initial / devisor ;
    int result = Mathf.FloorToInt(divided);
    return result;
}
于 2016-04-08T23:23:54.593 回答