1

我有以下代码行:

    float top = shape.Y + (shape.Height / 2.0) - 4.5;

哪个因错误而失败'Can't cast double to float。Shape.Y 和 shape.height 都是浮点型。

是什么导致了这个错误,最好的方法是确保 top 是一个浮点数(因为我需要将它传递给另一个期望浮点数的函数。

4

2 回答 2

10

尝试用 包裹您的数字f,因为通常2.0代表一个double数字。float 您可以在此处阅读更多信息。

float top = shape.Y + (shape.Height / 2.0f) - 4.5f;
于 2013-03-10T02:42:23.410 回答
2

原因是你的文字2.04.5类型是double.

然后在你的表情中

 shape.Y + (shape.Height / 2.0) - 4.5

划分似乎在 afloat和 a之间double。但是有一个从to的隐式转换(另一个方向的转换不是隐式的),所以“扩大”到 a 。然后加上这个双倍,出于同样的原因,也扩大到一个。然后整个表达式得到 type 。floatdoubleHeightdoubleYYdoubledouble

但是您将top变量声明为 a float,并且double无法将表达式float隐式转换为。

富士给出了解决方案:如果将文字写成2.0f(或只是2f)和4.5f,那么加法、除法和差值将一直计算为floats,无需转换。

(实际上,如果您将分母指定为2,它将隐式转换intfloat,但正如您现在所知道的那样,如果您将其包含在内,可能更容易看出意图f。)

于 2013-03-10T14:28:26.110 回答