我试图让一个Math.Pow转换为float类型但是VS2013告诉我我不能隐式转换类型' double'到了'浮动'。
我以为我正在按照以下方式进行演员表:
private void COMBO_AWG_SelectedIndexChanged(object sender, EventArgs e)
{
float d = 0.0f;
int awg = int.Parse(COMBO_AWG.Text);
//MessageBox.Show(awg.ToString());
d = 0.127 * (92 * ((float)Math.Pow(36, awg) / 39));
TB_awg2mm.Text = d.ToString();
}
有什么想法吗?
答案 0 :(得分:5)
您向[{1}}的投射一直有效,直到您多次使用float
0.127
值。所有double
值都将隐式转换为int
以进行计算。具有float
值的最终乘法使整个表达式为double
类型。
CPU使用double
在内部完成所有浮动数学运算,因此如果您需要进行转换,则在计算的前面步骤中使用double
是没有意义的。一直使用float
值(为了获得最佳精度),并投射最终结果:
double
答案 1 :(得分:4)
您 将其投放到float
,但您将该结果与double
相乘,结果为double
。
任何不是整数且不以f
或F
为后缀的文字都被视为double
。
解决此问题:
d = 0.127F * (92 * ((float)Math.Pow(36, awg) / 39));
请注意F
之后的0.127
。
答案 2 :(得分:4)
您的问题是数字0.127
,编译器会将其解释为double,因此整个表达式的结果将导致double值。
修复如下:
d = 0.127f * (92.0f * ((float)Math.Pow(36.0f, awg) / 39.0f));
将f
附加到数字会使编译器将其解释为float
。
编辑:
对于Math.Pow
,float
不存在重载,因此您必须转换结果。