unity c#Mathf.FloorToInt(-0.5)返回0(行为类似于Mathf.CielToInt)



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

您得到的是逐位整数除法。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时,你有两个int,它的计算结果是0而不是-0.5,因为结果也必须是int。解决这个问题的方法是使两个值中的一个成为float

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

这使得在CCD_ 10和CCD_。类似的代码是

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

相关内容

  • 没有找到相关文章

最新更新