11 Stimmen

C#, Operator '*' kann nicht auf Operanden vom Typ 'double' und 'decimal' angewendet werden

Dieser Fehler sollte einfach zu beheben sein, aber ich scheine ihn nicht zu lösen. Das Problem liegt in der Tatsache, dass derselbe Code bereits früher im Programm funktioniert. Ich sehe keinen Grund dafür, dass er bei dieser Instanz einen Fehler sendet und nicht bei den vier vorherigen. Verweisen Sie auf den Code unten, und fühlen Sie sich frei, jede Kritik, die Sie haben können, wie es sollte mich besser machen. Falls es eine Rolle spielt, ich verwende Sharp Develop 2.2.

Hier ist ein Beispiel für einen funktionierenden Code:

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();

    }

Hier ist ein Beispiel für den Code, der den Fehler in der Betreffzeile dieses Beitrags sendet:

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();
        }

    }

Ich bin für jede Hilfe dankbar, die ich bekommen kann. Ich danke Ihnen.

29voto

Jimmy Punkte 85199
.8m instead of .8

4voto

Harper Shelby Punkte 16295

Sie haben nicht gesagt, um welche Linie es sich handelt, aber ich tippe auf diese beiden:

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

Und:

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

Beachten Sie, dass Ihre .8 nicht den Qualifizierer "m" hat. An jeder anderen Stelle, die ich sehe, haben Sie das angegeben.

3voto

Dylan Beattie Punkte 51678

In dieser Zeile hier:

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

Sie geben .8 als Literal an, aber ohne das Suffix 'm', so gibt das Literal ein Double an.

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

wird das Problem beheben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X