C #, оператор '*' не может быть применен к операндам типа 'double' и 'decimal'

Эта ошибка должна быть простой, но я не могу заставить ее работать. Проблема заключается в том, что этот самый код работает ранее в программе. Я не вижу причин для того, чтобы отправлять ошибку в этом случае, а не в четырех предыдущих. Изучите приведенный ниже код и не стесняйтесь высказывать любую критику, которая может вам помочь. Если это имеет значение, я использую 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();
        }

    }

Я ценю любую помощь, которую я могу получить. Спасибо.

12.12.2008 18:28:25
3 ОТВЕТА
РЕШЕНИЕ
.8m instead of .8
28
12.12.2008 18:31:28
Спасибо за указание на это. Я втайне надеялся, что все было не так просто. :)
tejas_grande 12.12.2008 18:33:11
m заставляет литерал интерпретироваться как десятичное число.
Broam 2.12.2009 16:32:46

В этой строке здесь:

z = (x y) (0,8 * 1,732050808 м);

вы указываете .8 как литерал, но без суффикса 'm', литерал указывает на двойное число.

z = (x y) (0,8 * 1,732050808 м);

это исправлю.

3
12.12.2008 18:32:11

Вы не сказали, какая это была линия, но я держу пари на этих двух:

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

А также:

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

Обратите внимание, что ваш .8 не имеет спецификатора 'm'. В любом другом месте, которое я вижу, вы поставляли это.

4
12.12.2008 18:32:55