C #, Operatore '*' non può essere applicato a operandi di tipo 'double' e 'decimale'

StackOverflow https://stackoverflow.com/questions/363706

  •  21-08-2019
  •  | 
  •  

Domanda

Questo errore dovrebbe essere un semplice, ma i cant sembrano per farlo funzionare. Il problema sta nel fatto che questo stesso codice funziona in precedenza nel programma. I don a vedere alcuna ragione per essere l'invio di un errore in questa istanza e non i quattro precedenti. Riferimento il codice qui sotto, e sentitevi liberi di fornire qualsiasi critica si può avere come dovrebbe fare meglio di me. Se è importante, io sto usando sharpdevelop 2.2.

Ecco un esempio di codice che funziona:

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

    }

Ecco l'esempio del codice che invia l'errore nella riga dell'oggetto di questo post:

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

    }

Apprezzo tutto l'aiuto che posso ottenere. Grazie.

È stato utile?

Soluzione

.8m instead of .8

Altri suggerimenti

Non hai detto quale linea fosse, ma sto scommettendo su questi due:

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

E

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

Si noti che il 0,8 non ha la qualificazione 'm'. Ogni altro posto ti vedo fatto di fornire questo.

In questa riga qui:

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

si specifica 0,8 come un letterale, ma senza il suffisso 'm', quello letterale specifica una doppia.

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

lo risolverà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top