2015-12-18 2 views
2

я следующий кодInt.TryParse() возвращает ложь всегда

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

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

Что я здесь делаю неправильно?

+1

Итак, вы читали MSDN [Int32.TryParse] (https://msdn.microsoft.com/en-us/library/f02979c7%28v=vs.110%29.aspx), который говорит, что " false ... представляет число меньше MinValue или больше MaxValue ". Не могли бы вы прояснить, в какой части этого заявления вам нужна помощь? –

ответ

12

Предел int (32-bit integer) - -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 (содержащий фракцию, более высокую точность).

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 цифр (reference).

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.

+0

В основном мне нужны значения Int32 только, поскольку я использую его в функции, которая принимает только 32-битные целочисленные значения. Возможно, мне нужно создать случайное число, не превышающее 2,147,483,647. –

2

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

0

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

0

Использование long.TryParse()

Ваш номер слишком велик, чтобы преобразовать в междунар.

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

2

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

TextBox.MaxLength=9 
Смежные вопросы