C# 操作员'<';无法应用于类型为';十进制';和';双倍';

C# 操作员'<';无法应用于类型为';十进制';和';双倍';,c#,.net,comparison,C#,.net,Comparison,我正试图设计一个程序,计算用户输入的分数。我还试图设置用户输入的上限或下限(即0=100)。但当我使用十进制时,它总是给我这个错误,“运算符”< P>为十进制,你必须在值上加上“M”后缀,告诉计算机它是十进制的,否则计算机会把它看成是一个双。 yourDecimal

我正试图设计一个程序,计算用户输入的分数。我还试图设置用户输入的上限或下限(即0=100)。但当我使用十进制时,它总是给我这个错误,“运算符”< P>为十进制,你必须在值上加上“M”后缀,告诉计算机它是十进制的,否则计算机会把它看成是一个双。 yourDecimal<98.56M;

我注意到您的代码中至少有四个问题

首先,如前所述,您应该使用
M
后缀告诉C#编译器它是一个
十进制
,以便进行可接受的比较:

if (Exam_1 < 0.0M | Exam_1 > 100.0M)
第三,我认为了解这一点非常重要:考试分数不需要
十进制
数据类型(除非你的考试分数可以是99.123456788901234556789012345格式-这是不可能的)

decimal
通常用于要求非常高精度的数字(例如
银行中的货币计算)高达16位以上的准确度。如果你的考试分数不需要这样做,不要使用
十进制
,这太过分了。只需使用
双精度
整数
浮点
进行
考试
,你很可能是在正确的轨道上

第四关于错误处理,这是不正确的做法:

if (Exam_1 < 0.0 | Exam_1 > 100.0)
    Console.Write("Exam score cannot be less than 0. or greater than                      100.0. Please re-enter the score for Exam 1 <Example: 95.0>:");
    Exam_1 = Convert.ToDecimal(Console.ReadLine());

在C#语言中,缩进并不意味着作用域,这与Python等语言不同。

正如其他语言已经指出的那样。为了使用大于或小于运算符比较
十进制
类型,必须将其与另一个
十进制
类型进行比较。为了将文字数字声明为十进制,需要M
M
后缀。以下是
十进制
类型上的后缀,以供参考

if (Exam_1 < 0.0m || Exam_1 > 100.0m)
if(检查1<0.0m |检查1>100.0m)

请尝试
0M=myDecimal
(参考:)大多数情况下,此错误都是由于施法问题造成的。如果粘贴代码,我们可以给出准确的答案。@Abdulhamid否…您的错误处理(“循环”在您的术语中,但实际上不是)似乎是另一个问题…不幸的是..你能解释一下这个问题吗,这样我以后就不会碰到它了?在浏览时,我注意到你刚才给我的方式并没有将用户输入限制为“十进制”(即2.0而不是2)@Abdulhamid是的,通常我们不会强制用户在不改变值的情况下添加额外的零。这是因为
Convert.ToDouble
行为可以区分这一点。如果你想设置像put
.00
这样的限制,那么即使是
decimal
也不会有任何效果。你需要的是一个客户om字符串检查器-这可能会很麻烦,但没有什么好处。因此,人们通常不会这样做。
if (Exam_1 < 0.0 | Exam_1 > 100.0)
    Console.Write("Exam score cannot be less than 0. or greater than                      100.0. Please re-enter the score for Exam 1 <Example: 95.0>:");
    Exam_1 = Convert.ToDecimal(Console.ReadLine());
double Exam_1 = -1; //I use double to simplify

Console.Write("Please enter score for Exam 1 <Example: 100.0>: ");
Exam_1 = Convert.ToDouble(Console.ReadLine());

while (Exam_1 < 0.0 || Exam_1 > 100.0) { //see the curly bracket
    Console.Write("Exam score cannot be less than 0. or greater than                      100.0. Please re-enter the score for Exam 1 <Example: 95.0>:");
    Exam_1 = Convert.ToDouble(Console.ReadLine());
} //see the end curly bracket
if (Exam_1 < 0.0m || Exam_1 > 100.0m)