unity c# Mathf.FloorToInt(-0.5) returns 0(表现得像Mathf.CielToInt)
unity c# Mathf.FloorToInt(-0.5) returns 0 (acts like Mathf.CielToInt)
这是 Mathf.FloorToInt 的脚本参考文档 如您所见,它应该将 -0.5 舍入为 -1。出于某种原因,在我的计算中使用时,它似乎 return 为 0。
我有两个相同功能的版本,它们的工作方式非常相似,但输出不同。我的代码只会向这些函数提交 3 到 18 之间的整数。
这个版本就像使用 Mathf.CielToInt 一样(returns 0 在 statRoll = 9 的情况下):
public int getBonus(int statRoll)
{
int result = Mathf.FloorToInt((statRoll - 10) / 2);
return result;
}
这是有效的版本(returns -1 在 statRoll = 9 的情况下):
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
时,您有两个整数,计算结果为 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
和 float
之间的划分产生了浮点数。类似的代码是
public int getBonus(int statRoll)
{
int initial = statRoll - 10;
float devisor = 2f;
float divided = initial / devisor ;
int result = Mathf.FloorToInt(divided);
return result;
}
这是 Mathf.FloorToInt 的脚本参考文档 如您所见,它应该将 -0.5 舍入为 -1。出于某种原因,在我的计算中使用时,它似乎 return 为 0。
我有两个相同功能的版本,它们的工作方式非常相似,但输出不同。我的代码只会向这些函数提交 3 到 18 之间的整数。
这个版本就像使用 Mathf.CielToInt 一样(returns 0 在 statRoll = 9 的情况下):
public int getBonus(int statRoll)
{
int result = Mathf.FloorToInt((statRoll - 10) / 2);
return result;
}
这是有效的版本(returns -1 在 statRoll = 9 的情况下):
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
时,您有两个整数,计算结果为 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
和 float
之间的划分产生了浮点数。类似的代码是
public int getBonus(int statRoll)
{
int initial = statRoll - 10;
float devisor = 2f;
float divided = initial / devisor ;
int result = Mathf.FloorToInt(divided);
return result;
}