施放Math.Pow浮动

Cim*_*ian 1 c# casting type-conversion pow

我试图让一个Math.Pow转换为float类型,但是VS2013告诉我"我不能隐式地将类型'double'转换为'float'.

我以为我在做演员如下:

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();
}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Rot*_*tem 5

将其强制转换为float,但是您将该结果与 a 相乘double,从而得到 a double

任何不是整数且没有后缀f或被F视为 a 的文字double

要解决此问题:

d = 0.127F * (92 * ((float)Math.Pow(36, awg) / 39));
Run Code Online (Sandbox Code Playgroud)

注意F之后0.127


Guf*_*ffa 5

你的演员一直float工作,直到你多了0.127,这是一个double价值.int将隐式转换所有值float以进行计算.带有double值的最终乘法使整个表达式成为类型double.

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

d = (float)(0.127 * (92.0 * (Math.Pow(36.0, awg) / 39.0)));
Run Code Online (Sandbox Code Playgroud)