在C#中,为什么我得到"不能将双重转换为浮动错误"?

时间:2013-03-10 02:40:34

标签: c# floating-point double

我有以下代码行:

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

whic失败并显示错误'无法将double转换为float。 Shape.Y和shape.height都是float类型。

导致此错误的原因是什么是最好的是确保top是一个浮点数(因为我需要将它传递给另一个需要浮点数的函数。

2 个答案:

答案 0 :(得分:11)

尝试使用f打包您的号码,因为通常2.0代表double号码。您可以详细了解float here

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

答案 1 :(得分:2)

原因是您的文字2.04.5属于double类型。

然后在你的表达中

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

该分区似乎介于floatdouble之间。但是从<{1}}到float隐式转换(其他方向的转换不是隐含的),因此double被“扩展”为{{ 1}}。然后要将Height添加到此双精度数中,出于同样的原因,double也会扩展为Y。然后整个表达式获得类型Y

但您将double变量声明为double,而top表达式无法隐式转换为float

富士给出了解决方案:如果你将文字写成{{​​1}}(或只是double)和float,那么加法,除法和差异将计算为{{1}一路走来,不需要转换。

(实际上,如果您将分母简称为2.0f,它将隐式地从2f转换为4.5f,但正如您现在所知,它可能更容易看到意图,如果你包括float。)