如何将 float 转换为 int?
How can I convert float to int?
cube1.name = string.Format("Terrain_{0}_{1}",
(int)Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x,
(int)Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y);
尝试为 int
施放它,但变化不大。
每个立方体的名称仍然是例如:Terrain_6.5_5.5
。但我希望名称为 Terrain_6_5
。
tilePositionInLocalSpace
是vector3
类型,x
都是float
类型。
您需要明确转换它:
cube1.name = string.Format("Terrain_{0}_{1}",
Convert.ToInt32(Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x),
Convert.ToInt32(Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y));
您需要将两者都转换为 int
,因为现在您要添加 int
和 float
,这当然会导致 float
。尝试:
cube1.name = string.Format("Terrain_{0}_{1}", (int)(Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x), (int)(Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y))
您刚刚遇到了一个优先级问题。你有:
(int) x + y
相当于
((int) x) + y
... 然后将转换的结果提升回 float 以执行浮点加法。只需将转换应用于整个结果即可:
(int) (x + y)
当然,x
和 y
是原始代码中相当长的表达式。为了可读性,我将提取两个值以分隔局部变量,因此您将拥有:
int sumX = (int) (Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x);
int sumY = (int) (Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y);
cube1.name = string.Format("Terrain_{0}_{1}", sumX, sumY);
或者更好:
var position = Terrain.activeTerrain.transform.position;
int sumX = (int) (position.x + tilePositionInLocalSpace.x);
int sumY = (int) (position.z + tilePositionInLocalSpace.y);
cube1.name = string.Format("Terrain_{0}_{1}", sumX, sumY);
直接把加法的结果:
(int) (x + y);
然后string.format ()...
我只想指定格式的位数。输入格式即可。
像这样:
// here | |
cube1.name = string.Format("Terrain_{0:0}_{1:0}",
Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x,
Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y);
cube1.name = string.Format("Terrain_{0}_{1}",
(int)Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x,
(int)Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y);
尝试为 int
施放它,但变化不大。
每个立方体的名称仍然是例如:Terrain_6.5_5.5
。但我希望名称为 Terrain_6_5
。
tilePositionInLocalSpace
是vector3
类型,x
都是float
类型。
您需要明确转换它:
cube1.name = string.Format("Terrain_{0}_{1}",
Convert.ToInt32(Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x),
Convert.ToInt32(Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y));
您需要将两者都转换为 int
,因为现在您要添加 int
和 float
,这当然会导致 float
。尝试:
cube1.name = string.Format("Terrain_{0}_{1}", (int)(Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x), (int)(Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y))
您刚刚遇到了一个优先级问题。你有:
(int) x + y
相当于
((int) x) + y
... 然后将转换的结果提升回 float 以执行浮点加法。只需将转换应用于整个结果即可:
(int) (x + y)
当然,x
和 y
是原始代码中相当长的表达式。为了可读性,我将提取两个值以分隔局部变量,因此您将拥有:
int sumX = (int) (Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x);
int sumY = (int) (Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y);
cube1.name = string.Format("Terrain_{0}_{1}", sumX, sumY);
或者更好:
var position = Terrain.activeTerrain.transform.position;
int sumX = (int) (position.x + tilePositionInLocalSpace.x);
int sumY = (int) (position.z + tilePositionInLocalSpace.y);
cube1.name = string.Format("Terrain_{0}_{1}", sumX, sumY);
直接把加法的结果:
(int) (x + y);
然后string.format ()...
我只想指定格式的位数。输入格式即可。
像这样:
// here | |
cube1.name = string.Format("Terrain_{0:0}_{1:0}",
Terrain.activeTerrain.transform.position.x + tilePositionInLocalSpace.x,
Terrain.activeTerrain.transform.position.z + tilePositionInLocalSpace.y);