Int.TryParse() всегда возвращает false

У меня есть следующий код

 int varOut;
 int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660  

Здесь txt1.Text - это случайное 16-значное число, сгенерированное JavaScript, которое является целым числом. Но приведенный выше код всегда возвращает false, т.е. значение varOut всегда равно нулю.

Что я здесь не так делаю?

6 ответов

Решение

Предел для int (32-bit целое число) -2,147,483,648 в 2,147,483,647, Ваш номер слишком велик.

Для больших integer номер, такой как ваш случай, попробуйте Parse с помощью long.TryParse (или же Int64.TryParse поскольку Int64 является long в C#) вместо. Предел для long число из диапазона -9.2e18 to 9.2e18*

long varOut;
long.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660  

Это должно быть достаточно для вашего номера, который только вокруг 4.2e15 (4,286,656,181,793,660).

В качестве альтернативы, вы можете рассмотреть возможность использования decimal.TryParse если вы хотите иметь десятичное число (содержащее дробь, более высокую точность).

decimal varOut;
decimal.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660  

это 128-bit тип данных, с диапазоном -7.9e28 to 7.9e28, а также 28-29 точность значащих цифр, лучше всего подходит для любых расчетов с участием денег.

И, как последнее замечание для завершения ответа, может быть небезопасно использовать double - не используйте это. Хотя double имеет очень высокий диапазон ±5.0 × 10e−324 to ±1.7 × 10e308, его точность составляет всего около 15-16 цифр ( ссылка).

double varOut;
double.TryParse(txt1.Text, out varOut); // Not a good idea... since the input number is 16-digit Here txt1.Text = 4286656181793660  

В этом случае ваш номер состоит из 16 цифр, которые находятся на границе double точность. Таким образом, в некоторых случаях вы можете получить неправильный результат. Только если вы уверены, что ваш номер будет иметь точность не более 15 цифр, вы можете безопасно его использовать.



*-9,223,372,036,854,775,808 в 9,223,372,036,854,775,807,

Использование MaxLength свойство ограничить количество цифр, и пользователь не может ввести больше, чем int32,

TextBox.MaxLength=9  

int это просто сокращение для int32; это 32-битное (подписанное) целое число, означающее, что оно не может содержать число больше 2 миллиардов. Ваш номер больше этого и поэтому недействителен int значение.

Вы должны использовать long вместо int, Ваш номер слишком велик для int

Используйте long.TryParse()

Ваш номер слишком велик для конвертации в int.

или вы можете использовать int64.tryparse

Похоже, вы можете использовать значения, которые превышают емкость используемого вами типа... посмотрите https://msdn.microsoft.com/en-us/library/system.int32.maxvalue%28v=vs.110%29.aspx

Храните его как long вместо int. https://msdn.microsoft.com/en-us/library/ctetwysk.aspx

Другие вопросы по тегам