2016-10-19 50 views
0

每次我运行它时,它都将向下舍入num13,这不是我想要的。我希望它舍入到小数点后两位。如何将其整数转换为小数点后两位,以便如果输入正确的答案,例如10/4 == 2.50,那么if (num12 == num13)将评估为true?目前num13的评估结果为2,而不是预期的2.5。C#变量自动舍入,而它被设置为舍入到2位小数

Random NumberGen = new Random(); 
start6: 
    int num10 = NumberGen.Next(1, 11); 
    int num11 = NumberGen.Next(1, 11); 

start5: 
    if (num10 > num11) 
    { 
     Console.Write(num10 + "/" + num11 + " = "); 
     decimal num12; 
     num12 = Convert.ToDecimal(Console.ReadLine()); 
     num12 = Math.Round(num12, 2); 
     decimal num13; 
     num13 = num10/num11; 
     num13 = Math.Round(num13, 2); 
     if (num12 == num13) 
     { 
      Console.Clear(); 
      goto start; 
     } 
     else 
     { 
      Console.WriteLine("wrong answer, try again."); 
      goto start5; 
     } 
    } 
    else 
    { 
     goto start6; 
    } 
+0

[documentation](https://msdn.microsoft.com/en-us/library/aa691373(v = vs.71).aspx)是你的朋友。 –

+1

整数除法...'10/4 = 2'因为余数被截断时除以整数。 –

+1

为什么你在c#中使用goto语句?!? – YuvShap

回答

0

你必须初始化num10和num11为十进制或双打开始,当您计算两个整数你会得到一个整数值。

2

由于惊人的,因为它听起来,

decimal a = 10/4; 

将产生2,不2.5。这是因为/运营商,如果两个操作数(104)为整数执行整数除法

当你把两个整数,结果始终是整数。 (来源:MSDN):

decimal num13; 
num13 = (decimal)num10/num11; 

(虽然你在

在你的情况,这可以通过确保您的一个操作数为不是整数固定它:请考虑让你的变量名称更具描述性。)

+0

你建议同样的答案,但在我之前:( –

0
decimal num13; 
num13 = (decimal)num10/num11; 
0

in o ne line

decimal num13= Math.Round((decimal)num10/num11, 2);