2013-03-29 3 views
0

я написал этот код я получаю сообщение об ошибке в случае (TOT = 100) Буквальных двойного типа не может быть неявно преобразован в десятичнойошибка преобразования в десятичную

//value in textboxes 
    decimal p1 = Convert.ToDecimal(TextBox2.Text); 
    decimal p2 = Convert.ToDecimal(TextBox3.Text); 
    decimal p3 = Convert.ToDecimal(TextBox4.Text); 
    decimal p4 = Convert.ToDecimal(TextBox5.Text); 
    decimal p5 = Convert.ToDecimal(TextBox6.Text); 
    decimal p6 = Convert.ToDecimal(TextBox7.Text); 

    //adding all the p's 
    decimal tot = p1 + p2 + p3 + p4 + p5 + p6; 

    if (tot = 100.00) 
    { 
    Label2.Text = "Percentage is 100" 
    } 
     else 
     { 
      Label2.Text = "Total of percentages is not 100."; 
     } 
+0

Что в мире делает это нужно делать с ASP.NET? –

+0

@JohnSaunders Ссылка 'TextBox2.Text'. Это не относится к задаваемому вопросу, но легко понять, как OP был запутан при пометке. –

+0

@bennor: ОП сказал вам это, или вы догадываетесь? И TextBox2.Text может так же легко быть WinForms –

ответ

5

Чтобы указать литерал decimal с десятичной точкой, вы должны использовать десятичный спецификатор M:

if(tot == 100.00M) 

В противном случае компилятор предполагает, что вы хотите получить double (к чему относится сообщение об исключении - двойной не может быть преобразован в десятичное без явного приведения).

Однако в этом примере .00 является излишним, так что вы могли бы просто использовать:

if(tot == 100M) 

Как уже упоминалось в других ответов, вы должны убедиться, что вы используете == при сравнении значений в если заявление. Если бы вы это сделали, вы бы получили немного другое исключение: "Operator '==' cannot be applied to operands of type 'decimal' and 'double'", что, возможно, немного улучшило ситуацию.

1

У вас есть ошибка:

if(tot=100.00) 

является назначить 100,00 до TOT, не сравнить их. Но если вы будете писать

if(tot == 100.00M) 

все будет работать

1

типа литерала должны быть ясны из самого буквальным, и типа переменного это присвоенное должен быть отнесены к от типа что буквально. Нет никакого неявного преобразования из double to decimal (поскольку он может потерять информацию).

Используйте суффикс 'M' для создания литерала такого типа, как 100.00M.

0

использование

if (tot = 100M) 

Он будет работать, потому что tot является decimal типа

Смежные вопросы