次のコード行があります。
float top = shape.Y + (shape.Height / 2.0) - 4.5;
whicはエラーで失敗しています'doubleをfloatにキャストできません。Shape.Yとshape.heightはどちらもfloatタイプです。
このエラーの原因と最善の方法は、topがfloatであることを確認することでした(floatを期待する別の関数に渡す必要があるため)。
次のコード行があります。
float top = shape.Y + (shape.Height / 2.0) - 4.5;
whicはエラーで失敗しています'doubleをfloatにキャストできません。Shape.Yとshape.heightはどちらもfloatタイプです。
このエラーの原因と最善の方法は、topがfloatであることを確認することでした(floatを期待する別の関数に渡す必要があるため)。
f
通常2.0
は数字を表すので、数字をで囲むようにしてくださいdouble
。float
あなたはここでもっと読むことができます。
float top = shape.Y + (shape.Height / 2.0f) - 4.5f;
原因は、リテラル2.0
と4.5
がタイプであるということdouble
です。
それからあなたの表現で
shape.Y + (shape.Height / 2.0) - 4.5
分割はafloat
とaの間にあるようdouble
です。ただし、からへの暗黙的な変換があるため(他の方向への変換は暗黙的ではありません)、に「拡張」されます。次に、同じ理由で、このdoubleに追加することも、に拡張されます。次に、式全体がタイプになります。float
double
Height
double
Y
Y
double
double
top
ただし、変数をとして宣言するfloat
と、式を暗黙的double
に変換することはできません。float
Fujiが解決策を示しました。リテラルを2.0f
(または単に2f
)とと書くと4.5f
、加算、除算、差はfloat
ずっとsとして計算され、変換は必要ありません。
(実際には、分母をちょうどのように指定すると、から暗黙的に2
変換されますが、今ではわかるように、それを含めると意図がわかりやすくなります。)int
float
f