这是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;
}
您得到的是逐位整数除法。statRoll
和10
都是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;
}