0

我已经编写了这段代码,我在 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.";
        }
4

5 回答 5

5

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

if(tot == 100.00M)

否则,编译器会假定您需要 a double(这是异常消息所指的 - 如果没有显式强制转换,双精度数就无法转换为十进制数)。

然而,在这个例子中.00是多余的,所以你可以使用:

if(tot == 100M)

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

于 2013-03-29T05:21:34.470 回答
1

尝试

if (tot == 100.00)
{
    //etc
}
于 2013-03-29T05:20:26.637 回答
1

你有错误:

if(tot=100.00)

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

if(tot == 100.00M)

一切都会奏效

于 2013-03-29T05:22:51.867 回答
1

字面量的类型应该从字面量本身中明确,并且分配给它的变量的类型应该可以从该字面量的类型中分配给。没有从双精度到十进制的隐式转换(因为它可能会丢失信息)。

使用“M”后缀来创建这种类型的文字,例如 100.00M。

于 2013-03-29T05:32:03.293 回答
0

采用

if (tot = 100M)

它会起作用,因为totdecimal类型

于 2013-03-29T05:41:43.383 回答