1

次のコード行があります。

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

whicはエラーで失敗しています'doubleをfloatにキャストできません。Shape.Yとshape.heightはどちらもfloatタイプです。

このエラーの原因と最善の方法は、topがfloatであることを確認することでした(floatを期待する別の関数に渡す必要があるため)。

4

2 に答える 2

10

f通常2.0は数字を表すので、数字をで囲むようにしてくださいdoublefloat あなたはここでもっと読むことができます。

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です。ただし、からへの暗黙的な変換があるため(他の方向への変換は暗黙的ではありません)、に「拡張」されます。次に、同じ理由で、このdoubleに追加することも、に拡張されます。次に、式全体がタイプになります。floatdoubleHeightdoubleYYdoubledouble

topただし、変数をとして宣言するfloatと、式を暗黙的doubleに変換することはできません。float

Fujiが解決策を示しました。リテラルを2.0f(または単に2f)とと書くと4.5f、加算、除算、差はfloatずっとsとして計算され、変換は必要ありません。

(実際には、分母をちょうどのように指定すると、から暗黙的に2変換されますが、今ではわかるように、それを含めると意図がわかりやすくなります。)intfloatf

于 2013-03-10T14:28:26.110 に答える