转换错误为十进制

时间:2013-03-29 05:19:08

标签: c# type-conversion

我写了这段代码我在if(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.";
        }

5 个答案:

答案 0 :(得分:5)

要指定带小数点的decimal字面值,必须使用小数点说明符M

if(tot == 100.00M)

否则,编译器假定您需要double(这是异常消息所指的内容 - 如果没有显式强制转换,则不能将double转换为小数。)

但是,在此示例中,.00是多余的,因此您可以使用:

if(tot == 100M)

如其他答案中所述,您必须确保在比较if语句中的值时使用==。如果你这样做了,你会收到一个稍微不同的例外:"Operator '==' cannot be applied to operands of type 'decimal' and 'double'",这可能会让事情变得更加清晰。

答案 1 :(得分:1)

尝试

if (tot == 100.00)
{
    //etc
}

答案 2 :(得分:1)

您有错误:

if(tot=100.00)

将100.00分配给tot,而不是比较它们。 但是如果你要写

if(tot == 100.00M)

一切都会起作用

答案 3 :(得分:1)

文字的类型应该从文字本身清楚地表明,并且它所分配的变量的类型应该可以从该文字的类型中分配。没有从double到decimal的隐式转换(因为它可能会丢失信息)。

使用'M'后缀创建此类型的文字,如100.00M。

答案 4 :(得分:0)

使用

if (tot = 100M)

它会起作用,因为totdecimal类型