【问题标题】:C#, Operator '*' cannot be applied to operands of type 'double' and 'decimal'C#,运算符'*'不能应用于'double'和'decimal'类型的操作数
【发布时间】:2008-12-12 18:28:25
【问题描述】:

这个错误应该是一个简单的错误,但我似乎无法让它工作。问题在于这个相同的代码在程序的早期工作。我看不出它有什么理由在这个实例上发送一个错误,而不是之前的四个。参考下面的代码,并随时提供您可能有的任何批评,因为它应该让我变得更好。如果重要的话,我正在使用 Sharp Develop 2.2。

这是一个有效的代码示例:

void calc2Click(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(tb2_fla.Text) & String.IsNullOrEmpty(tb2_e.Text) | String.IsNullOrEmpty(tb2_fla.Text) & String.IsNullOrEmpty(tb2_e.Text) | String.IsNullOrEmpty(tb2_e.Text))
    {
        MessageBox.Show("Enter either kVA and Voltage or FLA and Voltage", "Invalid Data Entry", MessageBoxButtons.OK);
    }       

        if (!String.IsNullOrEmpty(tb2_kva.Text) & !String.IsNullOrEmpty(tb2_e.Text))
    { 
            decimal x, y, z;
            x = decimal.Parse(tb2_kva.Text);      
            y = decimal.Parse(tb2_e.Text);
            z = (x * 1000) / (1.732050808m * y); //the m at the end of the decimal allows for the multiplication of decimals    
            tb2_fla.Text = z.ToString();
            tb2_fla.Text = Math.Round(z,2).ToString();
    }
        else
    {
        if (!String.IsNullOrEmpty(tb2_fla.Text) & !String.IsNullOrEmpty(tb2_e.Text))
    { 
            decimal x, y, z;
            x = decimal.Parse(tb2_fla.Text);      
            y = decimal.Parse(tb2_e.Text);
            z = (x * y * 1.732050808m) / 1000; //the m at the end of the decimal allows for the multiplication of decimals  
            tb2_kva.Text = Math.Round(z,2).ToString();

    }

这是在这篇文章的主题行中发送错误的代码示例:

void Calc4Click(object sender, EventArgs e)
{
        if (!String.IsNullOrEmpty(tb4_fla.Text) && String.IsNullOrEmpty(tb4_e.Text) || String.IsNullOrEmpty(tb4_kw.Text) & String.IsNullOrEmpty(tb4_e.Text) || String.IsNullOrEmpty(tb4_e.Text))
        {   //If values are entered improperly, the following message box will appear
        MessageBox.Show("Enter either FLA and Voltage or kW and Voltage", "Invalid Data Entry", MessageBoxButtons.OK);
        }   


        if (!String.IsNullOrEmpty(tb4_fla.Text)&& !String.IsNullOrEmpty(tb4_e.Text)&& String.IsNullOrEmpty(tb4_kw.Text))
        {//If the user eneters FLA and Voltage calculate for kW

            decimal x, y, z;
            x = decimal.Parse(tb4_fla.Text);
            y = decimal.Parse(tb4_e.Text);
            z = (x*y)*(.8 * 1.732050808m);
            tb4_kw.Text = Math.Round(z,0).ToString();

        }               

        if (!String.IsNullOrEmpty(tb4_kw.Text) && !String.IsNullOrEmpty(tb4_e.Text) && String.IsNullOrEmpty(tb4_fla.Text))
        {;//If the user enters kW and Voltage calculate for FLA
            decimal x, y, z;
            x = decimal.Parse(tb4_kw.Text);
            y = decimal.Parse(tb4_e.Text);
            z = (1000 * x)/(y * 1.732050808m)* .8;
            tb4_fla.Text = Math.Round(z,0).ToString();
        }

    }

感谢我能得到的任何帮助。 谢谢。

【问题讨论】:

    标签: c# decimal multiplication


    【解决方案1】:
    .8m instead of .8
    

    【讨论】:

    • 感谢您指出这一点。我暗暗希望事情没有那么简单。 :)
    • m 强制将文字解释为小数。
    【解决方案2】:

    你没有说是哪条线,但我赌的是这两条:

    z = (x*y)*(.8 * 1.732050808m);
    

    还有:

    z = (1000 * x)/(y * 1.732050808m)* .8;
    

    请注意,您的 .8 没有“m”限定符。我看到你的其他地方都提供了。

    【讨论】:

      【解决方案3】:

      在这一行:

      z = (xy)(.8 * 1.732050808m);

      您将 .8 指定为文字,但没有“m”后缀,文字指定双精度。

      z = (xy)(.8m * 1.732050808m);

      会解决的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 2011-04-03
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 2015-08-12
        • 1970-01-01
        相关资源
        最近更新 更多