Руководство по программированию в C#. Определение представления числового значения в строке
Чтобы определить, является ли строка допустимым представлением указанного числового типа, воспользуйтесь статическим методом TryParse , реализуемым всеми простыми числовыми типами, например DateTime и IPAddress. В следующем примере показано, как определить, является ли число 108 допустимым типом int.
int i = 0; string s = "108"; bool result = int.TryParse(s, out i); //i now = 108
Если строка содержит нечисловые знаки либо числовое значение слишком велико или мало для указанного типа, TryParse возвращает значение «false» и задает выходному параметру значение «0». В противном случае возвращается значение «true», а выходному параметру задается числовое значение строки.
Строка может содержать только числовые знаки и оставаться недопустимой для типа, где используется метод TryParse . Например, «256» не является допустимым значением для byte , однако оно допустимо для int . «98,6» не является допустимым значением для int , однако оно допустимо для decimal .
Пример
В следующем примере показано использование TryParse со строковыми представлениями значений long , byte и decimal .
string numString = "1287543"; //"1287543.0" will return false for a long long number1 = 0; bool canConvert = long.TryParse(numString, out number1); if (canConvert == true) Console.WriteLine("number1 now = ", number1); else Console.WriteLine("numString is not a valid long"); byte number2 = 0; numString = "255"; // A value of 256 will return false canConvert = byte.TryParse(numString, out number2); if (canConvert == true) Console.WriteLine("number2 now = ", number2); else Console.WriteLine("numString is not a valid byte"); decimal number3 = 0; numString = "27.3"; //"27" is also a valid decimal canConvert = decimal.TryParse(numString, out number3); if (canConvert == true) Console.WriteLine("number3 now = ", number3); else Console.WriteLine("number3 is not a valid decimal");
Отказоустойчивость
Простые числовые типы также реализуют статический метод Parse , который вызывает исключение, если строка не является допустимым числом. В целом оператор TryParse более эффективен, поскольку если число не является допустимым, он просто возвращает значение «false».
Безопасность .NET
Для проверки данных, введенных пользователем в такие элементы управления, как текстовые поля и поля со списком, всегда следует использовать метод TryParse или Parse .
См. также
- Преобразование массива байтов в значение типа int
- Практическое руководство. Преобразование строки в число
- Преобразование из шестнадцатеричных строк в числовые типы
- Анализ числовых строк
- Типы форматирования
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Как проверить является ли строка числом, если она содержит русские символы?
Написал функцию, которая проверяет каждый символ строки до тех пор, пока не встретит не цифру или терминирующий ноль. Если встречается не цифра, то функция возвращает 0. Если на всём пути не встретиалсь не цифра, возвращает 1. Проблема в том, что она не работает со строками, которые содеражт русские символы, так как их численные значения не входят в диапозон от -1 до 255.
int is_number(const std::string& s) < int count = 0; while (s[count]) < if (isdigit(s[count])) ++count; else return 0; >return 1; >
- Почему русские символы не входят в данный диапозон?
- Почему то, что русские символы не входят в диапозон, влияет на работу функции(т.е. выдаётся ошибка)?
- Что нужно сделать с моим кодом, чтобы функция корректно работала со строками, содержащие русские символы?
Отслеживать
задан 11 мая 2019 в 18:32
iwannaknow iwannaknow
17 8 8 бронзовых знаков
@Harry когда навожу на строку, то показывает, что она содержит кол-во символов в ней + 1. Из этого сделал такой вывод.
11 мая 2019 в 18:41
Приведите пример строк (обязательно с указанием их кодировки), на которых эта функция работает некорректно.
Проверить является ли строка числом в Python
К сожалению функция isdigit не работает для чисел с плавающей точкой и для отрицательных чисел. Так что для такой проверки можно использовать следующую функцию, которая представляет собой комбинацию из проверки isdigit и обычного конвертирования во float:
def is_digit(string):
if string.isdigit():
return True
else:
try: float(string) return True except ValueError: return False
>>>print(is_digit('neer'))
False
>>>print(is_digit('neer306'))
False
>>>print(is_digit('306'))
True
>>>print(is_digit('0.05'))
True
>>>print(is_digit('0.05abc'))
False
Как проверить является ли строка числом с
Как перед тем как конвертировать строку в int узнать является ли она числом? Никогда не думал, что будут проблемы с такой мелочью, но увы ответа не нашел. Помогите чем могите)
Сообщ. #2 , 29.02.08, 07:46

Рейтинг (т): 6
Цитата COOLibin @ 29.02.08, 07:26
Как перед тем как конвертировать строку в int узнать является ли она числом? Никогда не думал, что будут проблемы с такой мелочью, но увы ответа не нашел. Помогите чем могите)
isalpha ?
можешь еще попробовать делать конвертацию в try блоке. если исключение, значит не число
Сообщ. #3 , 29.02.08, 07:50

Рейтинг (т): 13
bool __fastcall TForm1::CheckChar (const AnsiString& in)
StrToInt(in);
return true;
return false;
Сообщение отредактировано: Большой — 29.02.08, 07:51
Сообщ. #4 , 29.02.08, 07:58
Full Member
Рейтинг (т): нет
Цитата popsa @ 29.02.08, 07:46
isalpha ?
можешь еще попробовать делать конвертацию в try блоке. если исключение, значит не число
isalpha? а это случайно не проверка на букву? а вот try/catch чё то не пашет, вызывается не мой обработчик
Сообщ. #5 , 29.02.08, 08:05

Рейтинг (т): 149
А еще вроде есть TryStrToInt
Добавлено 29.02.08, 08:09
а вот try/catch чё то не пашет, вызывается не мой обработчик
Может просто ты галочку Stop on Exception в опциях отладчика не снял?
Сообщ. #6 , 29.02.08, 08:10

Рейтинг (т): 6
Цитата COOLibin @ 29.02.08, 07:58
isalpha? а это случайно не проверка на букву?
Да.. с isalpha я поторопился/ зато откопал isdigit :
int isdigit(int c);
int iswdigit(wint_t c);
int _ismbcdigit(unsigned int c);
Description
Tests for decimal-digit character.
isdigit is a macro that classifies ASCII-coded integer values by table lookup. The macro is affected by the current locale’s LC_CTYPE category. For the default C locale, c is a digit (0 to 9).