C#转换类型double到float

时间:2017-07-27 09:23:22

标签: c# unity3d types

我是C#的新手,我无法解决为什么我在这些代码行上遇到以下错误。

  

"错误CS0266:无法隐式转换类型' double'到了'漂浮'。存在显式转换(您是否错过了演员?)"

float rightEdgeOfFormation = (float) transform.position.x + (width * 0.5);
float leftEdgeOfFormation = (float) transform.position.x - (width * 0.5);

我以为写作(浮动)是演员吗?

非常感谢!

6 个答案:

答案 0 :(得分:4)

类型转换具有所有其他操作的最高优先级。因此,在(float) transform.position.x之前评估+ (width * 0.5)。但是,(width * 0.5)double表达式,因为常量0.5double常量。 (如果您想要0.5f,则应该使用float。)在添加floatdouble时,C#始终"促进" floatdouble。因此,float + double的结果是double,然后无法将其分配给float

要修复此问题,请在转换为float之前将整个表达式放在括号中,或者将0.5 float设为0.5f,然后将其设为 10 is for Oct 27 is day 1500 is 3:00 PM

答案 1 :(得分:3)

您需要乘以0.5,当您使用花车时,您需要将f放在最后。

这将有效:

float rightEdgeOfFormation = transform.position.x + (width * 0.5f);
float leftEdgeOfFormation = transform.position.x - (width * 0.5f);

答案 2 :(得分:2)

尝试:

float rightEdgeOfFormation = (float) (transform.position.x + (width * 0.5));
float leftEdgeOfFormation = (float) (transform.position.x - (width * 0.5));

你只是在施放transform.position.x而不是整个表达式&表达式中的其他内容导致计算以double形式完成。

答案 3 :(得分:1)

float rightEdgeOfFormation = (float)transform.position.x + ((float)width * 0.5F);
float leftEdgeOfFormation = (float)transform.position.x - ((float)width * 0.5F);

请参阅https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/float

答案 4 :(得分:1)

我认为这只是你的括号。 float rightEdgeOfFormation = (float) (transform.position.x + (width * 0.5));

答案 5 :(得分:0)

使用以下

float rightEdgeOfFormation = Convert.ToSingle(transform.position.x + (width * 0.5));

float leftEdgeOfFormation = Convert.ToSingle(transform.position.x - (width * 0.5));