2013-11-07 5 views
-1

Так что я хочу использовать метод TryParse, но до сих пор могу сделать это только с целым или двойным значением. Тем не менее, я хочу проверить, является ли значение числом, а если нет (если это строка, например), чтобы получить ложное значение. Что-то вроде IsDigit() - это Java.TryParse для чисел в C#?

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."); 
     } 
    } 

Так что я хочу это сделать, но вместо проверки целочисленного значения я хотел бы проверить числовое значение. Поэтому, если кто-нибудь может сказать мне, какой метод я могу использовать, я был бы очень доволен. Спасибо заранее!

+1

Что вы подразумеваете под «числовым значением» и почему его не устраивает TryParse для ints или парных? – Rik

+2

Я также хотел бы знать, что Боян Кушлев считает разницей между «числовым значением» и двойным. Какая строка будет представлять число, но не быть разборчивой как двойной? – Tobberoth

+0

любое числовое число вернет false, что здесь проблема? –

ответ

2

использование double:

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

Это будет разбирать любого вещественного числа.

+0

Нет, не будет. У вас много реальных чисел, которые не могут анализировать. –

+0

Попробуйте 'double.TryParse (" 1e123456789 ", out number)'. Он вернет false. –

+0

Да, я получил вашу точку зрения, ответ правильный, так как он соответствует его определению численного значения. – Ofiris

1

Для одного символа есть Char.IsDigit(). В этом случае вы можете посмотреть на Console.ReadKey() вместо того, чтобы читать целую строку. Кстати, Char.IsDigit() также соответствует цифрам from other cultures.

Для нескольких персонажей вам нужно подумать о том, что вы хотите принять. десятичные числа, показатели, отрицательные числа или несколько символов с несколькими цифрами?

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."); 
    } 

Вы также можете разрешить разделители, включив их в регулярное выражение.

1
bool result = double.TryParse(mystring, out num); 

double.TryParse также работает с целыми числами.

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); 
} 
+1

'Int32.TryParse (input, out intValue) 'не требуется, поскольку он покрывается последним. –

2

TryParse для десятичных или двойных типов - ваш предел для встроенных методов. Если вы хотите больше, вам придется самостоятельно разбирать строку. Может быть довольно легко сделано с использованием регулярного выражения, например,

^-?[0-9]+\.?[0-9]*([Ee][+-]?[0-9]+)?$ 
+0

Предположим, что вход 'e3', на который' double' вы его конвертируете и как? как бы вы перевели ввод в переменную, с которой вы можете работать? (любой вход) – Ofiris

+0

@Ofiris «e3» не будет соответствовать регулярному выражению, так как часть '[0-9] +' требует как минимум одной цифры. –

+0

'var regex = new Regex (@" -? [0-9] + \.? [0-9] * ([Ee] [+ -]? [0-9] +)? "); var m = regex.Match ("5.5.5"); // .Success == True' – Ofiris