Member 14195442 Ответов: 5

Как проверить, является ли введенное число двойным или целочисленным? (1 - целое число, но 1.0-двойное)


Я хочу проверить, является ли вход целочисленным или двойным. Моя проблема заключается в том, что когда я Интер 1,00 (что является двойным), мой результат является целым числом. Как я могу написать приложение, которое различает ( 1.00 и 1 ) ??

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

int main()
{

double a;
cin >> a;
if ( floor(a) == ceil(a) )
	cout << "Integer";
else
	cout << "Double";

    return 0;
}

5 Ответов

Рейтинг:
2

CPallini

Регистрация строка Люк, проверь ... строка!
(поиск точки)

Вы также можете использовать std::strtol[^] обеспечение (и проверка) str_end параметр.


Рейтинг:
2

OriginalGriff

Единственный способ сказать это-прочитать его как строку, а не двойник, и вручную разобрать ее. После того, как вы прочитали его в двойнике, нет никакого способа сказать, что пользователь на самом деле ввел.


Member 14195442

Я требуемый, чтобы читать, а не строку

Dave Kreskowiak

Нет никакого способа сделать это. Как только вы проанализируете строку как двойную, "1" и "1.00" будут идентичны в том, что касается содержимого вашего файла. a переменная.

Если вы настаиваете на использовании только одной переменной типа double, единственный способ определить разницу-это изучить строку, введенную на консоли, и найти десятичный разделитель, прежде чем пытаться разобрать строку как double.

Рейтинг:
2

Richard MacCutchan

Если пользователь вводит 2 или 2.0, то результирующее значение остается тем же самым. Нет никакого способа определить, что на самом деле было напечатано.


Рейтинг:
0

#realJSOP

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


Member 14195442

таким образом, нет прямого способа определить, является ли он целочисленным или двойным?

#realJSOP

Только не в c++. Конечно, вы можете написать функцию, чтобы сделать это, так что вам не придется иметь дело непосредственно с уродливыми битами.

Рейтинг:
0

KarstenK

Вы должны получить входные данные в виде строки и ЧЕМ преобразовать.

Вы также можете искать в этой строке символ". "/подстроку!!! :-О


Richard Deeming

* "затем конвертировать. :)