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