【问题标题】:Decimal exemption using Catch使用 Catch 的十进制豁免
【发布时间】:2021-11-28 05:30:02
【问题描述】:

我正在尝试制作一个计算器,当用户尝试使用十进制值时显示错误消息,我正在尝试使用 Catch 来免除十进制值,然后给用户和错误消息,例如“十进制值是无效”

static void Main(string[] args)
    {
        Console.Write("Enter an equation:");
        string input = Console.ReadLine().Trim();
        string[] terms = input.Split(new Char[] { ' ', '+', '-', '*', '/' }, StringSplitOptions.RemoveEmptyEntries);

        int firstNumber = Convert.ToInt32(terms[0]);
        if (input[0] == '-')
        {
            firstNumber = -firstNumber;
            input = input.Remove(0, 1);
        }
        input = input.Remove(0, terms[0].Length).Trim();

        char op = input[0];
        input = input.Remove(0, 1).Trim();

        int secondNumber = Convert.ToInt32(terms[1]);
        if (input[0] == '-')
            secondNumber = -secondNumber;

        int result = 0;

        if (op == '+')
            try
            {
                result = (firstNumber + secondNumber);
            }
            catch(FormatException)
            {
                Console.WriteLine("Sorry cannot accept decimals");
            }

        else if (op == '-')
            try
            {
                result = (firstNumber - secondNumber);
            }
            catch
            {
            }

        else if (op == '*')
            try
            {
                result = (firstNumber * secondNumber);
            }
            catch
            {
            }

        else if (op == '/')
            try
            {
                result = (firstNumber / secondNumber);
            }
            catch
            {
            }


        Console.WriteLine(result);
        Console.ReadLine();
    }
}

}

我正在尝试制作一个计算器,当用户尝试使用十进制值时显示错误消息,我正在尝试使用 Catch 来免除十进制值,然后给用户和错误消息,例如“十进制值是无效”

我正在尝试制作一个计算器,当用户尝试使用十进制值时显示错误消息,我正在尝试使用 Catch 来免除十进制值,然后给用户和错误消息,例如“十进制值是无效”

我正在尝试制作一个计算器,当用户尝试使用十进制值时显示错误消息,我正在尝试使用 Catch 来免除十进制值,然后给用户和错误消息,例如“十进制值是无效”

【问题讨论】:

标签: c# if-statement try-catch calculator


【解决方案1】:

如果您严格只需要整数来计算 - 您可以在Convert.ToInt32之前添加一个检查:

if (terms[0].Contains(".") || terms[0].Contains(","))
    Console.WriteLine("Sorry, only integral numbers supported!");

或将Convert.ToInt32 包装成try-catch:{

try 
{
    firstNumber = Convert.ToInt32(terms[0]);
}
catch 
{ 
    Console.WriteLine("You inputed not a number or not integral number!");
}

或者你可以使用doublefloatdecimal 类型代替int 并且没有这样的麻烦:

double firstNumber = double.Parse(terms[0], System.Globalization.CultureInfo.InvariantCulture);
// or
float firstNumber = float.Parse(terms[0], System.Globalization.CultureInfo.InvariantCulture);
// or
decimal firstNumber = decimal.Parse(terms[0], System.Globalization.CultureInfo.InvariantCulture);

System.Globalization.CultureInfo.InvariantCulture 用于处理点 . 或逗号 , 分隔符,但我更喜欢用点 (terms[0].Replace(",", ".") 添加逗号替换以进行正确解析。 您也可以将其包装到 try-catch 中,但是为此提供了 TryParse 方法:

double.TryParse(terms[0].Replace(",", "."), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out double firstNumber);
// or
float.TryParse(terms[0].Replace(",", "."), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out float firstNumber);
// or
decimal.TryParse(terms[0].Replace(",", "."), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal firstNumber);

您还可以通过System.Math.Round 方法对结果值进行操作以获得最接近的整数值:

double firstNumber = 0.5;
double secondNumber = 0.6;
double result1 = (firstNumber - secondNumber); // Will give you 1.1 (double type)
double result2 = Math.Round(firstNumber - secondNumber); // Will give you 1 (double type).
int result3 = (int)Math.Round(firstNumber - secondNumber); // Will give you 1 (int type)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2020-12-07
    • 2023-01-27
    • 2015-01-21
    相关资源
    最近更新 更多