Предел для 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
to 9,223,372,036,854,775,807
.
person
Ian
schedule
18.12.2015