Как узнать, больше ли число, чем максимальное значение в iphone goal-c - PullRequest
1 голос
/ 29 сентября 2010

A прочитайте несколько постов здесь и Google и не найти субстанциальный ответ.Предположим, у меня есть наибольшее число, и я должен привязать к переменной.Проблема возникает, когда у меня есть графический интерфейс, где пользователь будет вводить номер.Как я не могу знать, какое значение пользователь будет вводить в поле (давайте подумаем в UItextField), когда я получу число, а затем назначу его переменной, если число будет больше, то их максимум с типому меня будет переполнение и непоследовательное число.Другая ситуация, когда у меня есть некоторые значения, и я должен суммировать все.Если общая сумма больше типа переменной, я снова получу переполнение.

Как можно сравнить значение, введенное пользователем, с максимальным значением типа переменной?Я знаю, что есть константы для mim и max, но если у кого-то есть пример кода, то это поможет.

Ответы [ 5 ]

1 голос
/ 29 сентября 2010

Если вы храните данные в обычном беззнаковом int, самое большое число, которое может быть представлено, - ~0.

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

Библиотеками примеров являются BigDigits и GNU MPFR. Это чистый C и, следовательно, подходит для включения в проекты Objective-C.

Вы также не упомянули, используете ли вы целочисленные значения или числа с плавающей запятой.

0 голосов
/ 02 октября 2010

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

Вы идете в ту или иную сторону ....

1) Пользователь должен ввести значения этого большого размера, тогда мне нужно использовать переменные этого типа данных для их захвата.

ИЛИ

2) ЕслиЯ объявляю переменные этого конкретного типа данных, тогда пользователю будет разрешено вводить только те значения, которые позволяют тип данных.В этом случае вы должны ограничить поле ввода соответствующей длиной цифр.И вам не нужно присваивать значение переменной перед проверкой того, что оно больше, чем могут содержать ваши переменные.

Помните, вы знаете, каковы максимальные значения для каждого числового типа данных.Обычно для них в заголовочных файлах объявляются константы.
Удачи.

0 голосов
/ 29 сентября 2010

Используйте NSNumberFormatter и задайте значения максимум и минимум , соответствующие размеру типа, в который вы хотите поместить ввод.

0 голосов
/ 29 сентября 2010

Если вы можете ограничить каждое число не более, чем INT_MAX (2147483647 на большинстве платформ с какао) используйте long long (максимум 0x7fffffffffffffffLL на большинстве платформ) для суммы.Это соответствует большему числу цифр, чем кто-либо будет набирать. Если вам нужно умножить, вам нужно проверить переполнение.

Макросы в checkint.h удобны для этого.us NSDecimalNumber (38 цифр, плюс показатель степени).

Или вы можете поискать пакет bignum.

Какой ввод вы ожидаете?Насколько большими должны быть ваши цифры?Вам действительно нужно обрабатывать очень очень большие значения или просто выводить видимое сообщение об ошибке, а не только неправильные значения при переполнении?Если это просто «сообщение об ошибке, а не неправильный ответ», вы после использования int / long / long long и checkint.h.

0 голосов
/ 29 сентября 2010

Ограничьте количество цифр, которое может ввести пользователь, используйте целочисленный тип, который может вместить все цифры пользователя, чтобы проверить на переполнение (с плавающей запятой, если необходимо).

...