我有以下代码行:
float top = shape.Y + (shape.Height / 2.0) - 4.5;
whic失败并显示错误'无法将double转换为float。 Shape.Y和shape.height都是float类型。
导致此错误的原因是什么是最好的是确保top是一个浮点数(因为我需要将它传递给另一个需要浮点数的函数。
答案 0 :(得分:11)
尝试使用f
打包您的号码,因为通常2.0
代表double
号码。您可以详细了解float
here。
float top = shape.Y + (shape.Height / 2.0f) - 4.5f;
答案 1 :(得分:2)
原因是您的文字2.0
和4.5
属于double
类型。
然后在你的表达中
shape.Y + (shape.Height / 2.0) - 4.5
该分区似乎介于float
和double
之间。但是从<{1}}到float
的隐式转换(其他方向的转换不是隐含的),因此double
被“扩展”为{{ 1}}。然后要将Height
添加到此双精度数中,出于同样的原因,double
也会扩展为Y
。然后整个表达式获得类型Y
。
但您将double
变量声明为double
,而top
表达式无法隐式转换为float
。
富士给出了解决方案:如果你将文字写成{{1}}(或只是double
)和float
,那么加法,除法和差异将计算为{{1}一路走来,不需要转换。
(实际上,如果您将分母简称为2.0f
,它将隐式地从2f
转换为4.5f
,但正如您现在所知,它可能更容易看到意图,如果你包括float
。)