Member 14734681 Ответов: 4

Необработанное исключение: значение system.overflow.exception было либо слишком маленьким, либо слишком большим int32


У меня есть этот код C# здесь, и я пытаюсь сделать то, что когда я ставлю число со многими цифрами, приложение падает, и я хочу, чтобы оно не падало, но я не знаю, что делать, я попытался изменить команду .Parse, но Idk, какую команду использовать вместо этого. Пример заключается в том, что когда я запускаю приложение, я хочу поставить номер, например 564984894897987878, и я хочу, чтобы приложение не рухнуло, может ли кто-нибудь помочь мне в этом случае, пожалуйста?
int num;
            Console.Write("Please write your number here:");
            num = Int32.Parse(Console.ReadLine());
            


            if (num < 0)
                Console.WriteLine("This number is a positive number!");

            if (num > 0)
                Console.WriteLine("This number is a positive number!");


Что я уже пробовал:

Я пытался изменить команду .Parse, но она не сработала я даже пытался изменить тип данных, но это не сработало пожалуйста, кто-нибудь помогите мне!?

F-ES Sitecore

Вы хотите, чтобы он не разбился? Или вы хотите, чтобы он правильно обработал номер? Это две совершенно разные вещи.

4 Ответов

Рейтинг:
1

Richard MacCutchan

Не используйте Int32.Parse, использовать Типа int32.Метод TryParse (Система) | Microsoft Docs[^] вместо. Это отклонит любое число, которое является недопустимым или выходит за пределы диапазона, но без создания исключения.


Member 14734681

Я тоже использовал TryParse но это не сработало

Richard MacCutchan

Ну, если вы не покажете нам свой код и не объясните, что вы имеете в виду под этим - ничего не вышло"- тогда мы ничего не можем предложить.

Richard MacCutchan

Кроме того, я только что попробовал ваш код, и помимо того, что он говорит, что отрицательные числа являются положительными, он отлично работает. Мне кажется, ты показываешь нам не все.

Member 14734681

У тебя есть раздор, чувак?

Richard MacCutchan

Что?

Dave Kreskowiak

Разговор происходит на этом форуме или вообще не происходит.

Richard MacCutchan

Мне показалось, что он спрашивает, не понимаю ли я. :)

Dave Kreskowiak

Discord-это игровой командный голосовой чат и форумы.

Member 14734681

Это весь код, и да, он работает с Int32.Parse, когда я ставлю меньшее число с менее чем 10 цифрами, но когда я набираю число с более чем 10 цифрами, проблема проявляется

Dave Kreskowiak

Вы же знаете, что Int32 может содержать только положительное число до 2147483647, верно?

Рейтинг:
0

jimmson

Типы чисел имеют свои пределы. Используйте long введите вместо этого или неограниченное количество BigInteger.

Интегральные числовые типы - Справочник по C# | Microsoft Docs[^]

BigInteger Struct (System.Числовые Значения) | Майкрософт Документы[^]


Member 14734681

Я попробовал и то и другое, но ничего не вышло

jimmson

Не могли бы вы уточнить?

Member 14734681

Я не знаю, как разработать больше, это просто не сработало, может помочь мне, пожалуйста, скопировать вставить мой код, а затем попытаться отладить его и найти решение, которое очень помогло бы мне man <3

jimmson

Конечно, я могу это сделать! Для платных клиентов. Это бесплатная помощь. Прими это или оставь.

Рейтинг:
0

phil.o

564 984 894 897 987 878 это слишком большое число, чтобы поместиться в 32-битное целое число со знаком.
Интегральные числовые типы - Справочник по C# | Microsoft Docs[^]
Использовать Int64 или UInt64 вместо.

long num;
if (Int64.TryParse(Console.ReadLine(), out num))
{
   // Here the parsing succeeded
   if (num < 0)
      Console.WriteLine("This number is a negative number!");

   if (num > 0)
      Console.WriteLine("This number is a positive number!");
}
else
{
   Console.WriteLine("Input string is not a valid 64-bits integer.");
}
Редактировать:
С помощью TryParse позволяет обрабатывать синтаксический анализ и обеспечивать допустимое поведение независимо от того, является ли строка intput допустимой. Никогда не доверяйте пользовательского ввода.


Member 14734681

Можно ли применить его к моему коду и отправить в качестве решения ?

Member 14734681

Не могли бы вы*

phil.o

Я немного обновил свое решение.

Рейтинг:
0

MadMyche

Сообщение об исключении сообщает вам, в чем заключается проблема; число слишком велико для назначенного типа int32.
Чтение документации для int.Parse() метод подтвердит это

Документация MS

с представляет собой число, меньшее minvalue или больше, чем maxvalue.
А теперь, если у вас есть try...catch блок вы могли бы поймать эту ошибку и должным образом сообщить о ней обратно
int num;
Console.Write("Please write your number here:");
try {
	num = Int32.Parse(Console.ReadLine());

	if (num < 0) { Console.WriteLine("This number is a positive number!"); }
	if (num > 0) { Console.WriteLine("This number is a positive number!"); }
}
catch (OverflowException) { Console.WriteLine("Error: this number is way too big for an Int32!":); }
Также.. вы можете проверить свою логику
if (num < 0) ...Console.WriteLine("This number is a positive number!");

Ссылка:
Int32.Метод Синтаксического Анализа (System) | Microsoft Docs[^]
Класс OverflowException (System) | Microsoft Docs[^]