施放Math.Pow浮动

时间:2014-07-17 14:39:59

标签: c# casting type-conversion pow

我试图让一个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();
}

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

您向[{1}}的投射一直有效,直到您多次使用float 0.127值。所有double值都将隐式转换为int以进行计算。具有float值的最终乘法使整个表达式为double类型。

CPU使用double在内部完成所有浮动数学运算,因此如果您需要进行转换,则在计算的前面步骤中使用double是没有意义的。一直使用float值(为了获得最佳精度),并投射最终结果:

double

答案 1 :(得分:4)

将其投放到float,但您将该结果与double相乘,结果为double

任何不是整数且不以fF为后缀的文字都被视为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.Powfloat不存在重载,因此您必须转换结果。