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