Math.round不能做负数c#

时间:2017-11-29 22:23:39

标签: c#

我有一个家庭作业,我应该创建一个代码,让用户输入一个十进制数,然后询问用户希望将该数字四舍五入到的小数。家庭作业是给我们的,只有很少的指导,如何做到这一点,所以我们应该在网上看。我们得到了关于Math.Round()的提示,这是我现在的代码:

        Console.WriteLine("Hej! Skriv in ett tal med decimaler.");           
        string strTal = Console.ReadLine();    
        double tal = Convert.ToDouble(strTal); 
        Console.WriteLine("Tack! Skriv nu in hur många decimaler du 
        vill ha med på ditt tal.");
        string strAvrundaren = Console.ReadLine();
        int avrundaren = Convert.ToInt32(strAvrundaren); 


        Console.WriteLine("Ditt tal är: " + 
        Math.Round(tal,avrundaren)); 

使用这段代码,我得到它的工作,以便每当用户写入一个十进制数,然后写入x的小数,它应该四舍五入到它正确。我的问题是,如果有人要输入一个负十进制数字(例如:-1,-2,-2,12313等等)我有想法?我尝试过,当我这样做时,我的代码崩溃了。现在我来找你们解释为什么会这样做。

编辑:说它“崩溃”,每当我在终端写一个负数时,窗口弹出到我的侧边栏,当我把它恢复时,终端上没有发生任何事情,我可以像我一样写想在终端但没有任何反应。如果有帮助,我在Visual Studio for Mac上。

最诚挚的问候 KIAN

2 个答案:

答案 0 :(得分:1)

您的程序缺少输入验证。负数不仅会导致它崩溃,而且任何非数字的字符串也会导致未处理的异常。

通常,程序在尝试使用它们之前应验证其输入。如果该值无效,您可以要求用户再次输入。例如:

using System;

public class Program
{
    public static void Main()
    {
        double tal;
        while (true)
        {
            Console.WriteLine("Hej! Skriv in ett tal med decimaler.");           
            string strTal = Console.ReadLine();    
            var ok = double.TryParse(strTal, out tal);
            if (ok) break;
        }

        int avrundaren; 
        while (true)
        {
            Console.WriteLine("Tack! Skriv nu in hur många decimaler du vill ha med på ditt tal.");
            string strAvrundaren = Console.ReadLine();
            var ok = int.TryParse(strAvrundaren, out avrundaren);
            if (!ok) continue;
            if (avrundaren < 0) continue;
            break;
        }

        Console.WriteLine("Ditt tal är: " + Math.Round(tal,avrundaren)); 
    }
}

DotNetFiddle

上试用

答案 1 :(得分:1)

负数舍入工作:这是一个快速测试:

var ans = Math.Round(-100.11119, 2);
Console.WriteLine(ans);

请参阅fiddle作为上述测试的证据。

如果您为第二个参数传递负数,请执行以下操作:

var ans = Math.Round(-100.11119, -2);
Console.WriteLine(ans);

您将收到运行时错误。

  

运行时异常(第7行):舍入数字必须介于0和15之间(包括0和15)。

请参阅fiddle进行上述测试。

因此,您需要检查用户提供给您的号码,并确保它在0到15之间(含)。