C #, Operatore '*' non può essere applicato a operandi di tipo 'double' e 'decimale'
-
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.
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à.