-1

所以我想使用 TryParse 方法,但到目前为止我只能使用整数或双精度值。但是,我想检查该值是否是一个数字,如果不是(例如,如果它是一个字符串)得到一个假值。像 IsDigit() 这样的东西是 Java。

static void Main()
    {
        int number;
        Console.Write("Enter a number: ");
        bool result = Int32.TryParse(Console.ReadLine(), out number); 
        if (result)
        {
            Console.WriteLine("The input number is an integer.");
        }

        else
        {
            Console.WriteLine("The input number is not an integer.");
        }
    }

所以我想这样做,但不是检查整数值,而是检查数值。所以如果有人能告诉我我可以使用什么方法,我会很高兴。提前致谢!

4

6 回答 6

2

使用double

double number;
bool result = double.TryParse(Console.ReadLine(), out number); 

这将解析任何实数。

于 2013-11-07T07:25:04.883 回答
2

十进制或双精度类型的 TryParse 是内置方法的限制。如果你想要更多,你必须自己解析字符串。使用正则表达式可以很容易地完成,例如

^-?[0-9]+\.?[0-9]*([Ee][+-]?[0-9]+)?$
于 2013-11-07T07:29:31.017 回答
1

对于单个字符,有Char.IsDigit(). 在这种情况下,您可能想要查看Console.ReadKey()而不是阅读整行。顺便说一句,Char.IsDigit()也匹配来自其他文化的数字。

对于多个字符,您需要考虑要接受什么。小数、指数、负数还是只是多个数字字符?

于 2013-11-07T07:24:43.657 回答
1
bool result = double.TryParse(mystring, out num);

double.TryParse也适用于整数。

于 2013-11-07T07:25:52.567 回答
0

你可以试试正则表达式

var regex = new Regex(@"^-*[0-9\.]+$");
var m = regex.Match(text);
if (m.Sucess)
    {
        Console.WriteLine("The input number is an integer.");
    }

    else
    {
        Console.WriteLine("The input number is not an integer.");
    }

您还可以通过将分隔符包含在正则表达式中来允许分隔符。

于 2013-11-07T07:25:33.297 回答
0
static bool enteredNumber()
{
    int intValue;
    double doubleValue;
    Console.Write("Enter a number: ");
    string input = Console.ReadLine();
    return Int32.TryParse(input, out intValue) ? true : double.TryParse(input, out doubleValue);
}
于 2013-11-07T07:27:26.723 回答