Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
#1

Определить, целое число хранится в переменной, или дробное - C++

06.06.2008, 10:16. Просмотров 2693. Ответов 22
Метки нет (Все метки)

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

и еще если можете как поставить чтоб в действии деления он делил скажем только до сотых или до тысячных.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2008, 10:16     Определить, целое число хранится в переменной, или дробное
Посмотрите здесь:

C++ Как определить целое число или нет
Поле first - целое число, длительность телефонного разговора в минутах; поле second - дробное число, стоимость одной минуты в гривнах C++
Почему при выводе имею целое число, а не дробное C++
C++ Присвоить целой переменной day целое значение 1,2, …, 6 или 7
Определить, является ли заданное целое число четным или нечетным C++
C++ Как разделить переменую типа double на целое и дробное число ?
C++ Программа при делении выдает целое значение а не дробное
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8506 / 2173 / 61
Регистрация: 07.03.2007
Сообщений: 10,848
Завершенные тесты: 1
06.06.2008, 10:48     Определить, целое число хранится в переменной, или дробное #2
чтобы делить до заданной точности используй округления, а вот про есть ли дробная функция - можно в принципе пойти примитивно, конвертнуть в строку и глянуть ,а есть ли разделитель....
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
06.06.2008, 10:52  [ТС]     Определить, целое число хранится в переменной, или дробное #3
f gj rfrjq kbnht exbimcz&&&

Добавлено через 44 секунды
а по какой литре учишься??
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8506 / 2173 / 61
Регистрация: 07.03.2007
Сообщений: 10,848
Завершенные тесты: 1
06.06.2008, 11:10     Определить, целое число хранится в переменной, или дробное #4
в смысле по какой? мне мсдн и хелпа билдера хватает... а что?
а я что-то не то сказал? сказал так, как бы сам писал прогу...
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
06.06.2008, 11:19  [ТС]     Определить, целое число хранится в переменной, или дробное #5
нет.мне интереснол по каким книгам ты учишься.я то тоже учусь
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8506 / 2173 / 61
Регистрация: 07.03.2007
Сообщений: 10,848
Завершенные тесты: 1
06.06.2008, 11:20     Определить, целое число хранится в переменной, или дробное #6
честно говоря, когда учился - только книгу по с++ до половины смог осилить, все остальное своим лбом пробивал, хотя ты прав - программист вечно учится...
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2220 / 735 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
06.06.2008, 17:19     Определить, целое число хранится в переменной, или дробное #7
Если ты говоришь про переменную типа float/double делай так:
float x =51.101;
if( x- (int)x == 0) // целая!
else дробная!

приведение к типу int - отбрасывает дробную часть.если без дробной части значение переменной не меняется,она и была целая.
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
06.06.2008, 17:30  [ТС]     Определить, целое число хранится в переменной, или дробное #8
спасибо)
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
07.06.2008, 10:17     Определить, целое число хранится в переменной, или дробное #9
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Если ты говоришь про переменную типа float/double делай так:
float x =51.101;
if( x- (int)x == 0) // целая!
else дробная!

приведение к типу int - отбрасывает дробную часть.если без дробной части значение переменной не меняется,она и была целая.
Код
float x = 51.0000001;
if( x- (int)x == 0 )  ..
Удивительно не правда ли ? X - вроде и не целое, а программа показывает, что целое ..)
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
07.06.2008, 12:53  [ТС]     Определить, целое число хранится в переменной, или дробное #10
а как тода сдалать????
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
07.06.2008, 15:37     Определить, целое число хранится в переменной, или дробное #11
а как тода сдалать????
Для того, чтобы не задавать глупых вопросов, следует сначала разобраться с внутренним форматом представления целых и вещественных чисел. И не надо спрашивать "А что это ?"... "А как это ?"..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
using namespace std;
 
unsigned long long pow(int base, int expn) {
    
    unsigned long long ret = 1;
 
    for(int i = 0; i < expn; ++i)
        ret *= base;
 
return ret;
}
 
template<class T> void print_bytes(T x) {
 
    int i;
    unsigned long long mask;
    unsigned long long P = *(unsigned long long *)&x;
 
    for(i = 0, mask = pow(2, sizeof(T) * 8 - 1); mask >= 1; ++i, mask /= 2)
        cout<<((P & mask) > 0) ? '1' : '0';
 
    cout<<endl;
}
 
int main(void) {
 
    float x = 4.000000;
 
    print_bytes(x);
 
    int c = 4;
 
    print_bytes(c);
 
return 0;
}
Способ определения - не панацея. Посмотри на формат хранения самих чисел.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2220 / 735 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
07.06.2008, 16:38     Определить, целое число хранится в переменной, или дробное #12
to RainWolf - не парься,все впорядке. во-первых,в примере тип float,имеющий маленькую точность.Используй double - будет лучше.
А данный пример лишь показывает,что представление 51 и 51.0000001 в типе float не отличаются.
to igor_nf - зачем зря человека в сомнения вгоняешь?) ниче удивительного тут,конечно,нет. прогони заодно программу
float x=51.000001.;
if(x==51) ...
Прогнав - увидим,что программа не отличает числа 51.00..1 и 51. В таком случае,отделить дробное от целого вообще не представляется возможным,поскольку в памяти они идентичны.
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
07.06.2008, 16:49     Определить, целое число хранится в переменной, или дробное #13
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Прогнав - увидим,что программа не отличает числа 51.00..1 и 51. В таком случае,отделить дробное от целого вообще не представляется возможным,поскольку в памяти они идентичны.
Да ну.. В памяти идентичны ? Ты мой вышестоящий пример прогонял ? Смотрел ? Идентичны они в памяти ??? Ты хоть понял, что вообще этот пример показывает ?
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2220 / 735 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
07.06.2008, 17:33     Определить, целое число хранится в переменной, или дробное #14
но но но.прогнал. Только твой пример не имеет отношения к делу,потому
что при вычитании int из float ,переменную int подвергают преобразованию типов
Попробуй ка так.Увидишь,что в памяти они идентичны.
а то что ты сравнил int и float не говорит ни о чем
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <conio.h>
 
using namespace std;
 
unsigned long  pow(int base, int expn) {
    
    unsigned long  ret = 1;
 
    for(int i = 0; i < expn; ++i)
        ret *= base;
 
return ret;
}
 
template<class T> void print_bytes(T x) {
 
    int i;
    unsigned  long mask;
    unsigned  long P = *(unsigned  long *)&x;
 
    for(i = 0, mask = pow(2, sizeof(T) * 8 - 1); mask >= 1; ++i, mask /= 2)
        cout<<((P & mask) > 0) ? '1' : '0';
 
    cout<<endl;
}
 
int main(void) {
 
    float x = 4.0000000;
 
    print_bytes(x);
 
    float c = 4.00000001;
 
    print_bytes(c);
    while(!kbhit() );
 
return 0;
}
Jafa
 Аватар для Jafa
50 / 50 / 3
Регистрация: 05.06.2008
Сообщений: 139
07.06.2008, 17:35     Определить, целое число хранится в переменной, или дробное #15
предлагаю использовать ф-цию modf:
C++
1
2
3
4
#include <cmath.h> 
double modf(x,intptr);
double x; значение с плавающей точкой
double *intptr; указатель на хранение целой части
Описание:
Функция modf разрывает значение с плавающей точкой x на
дробную и целую части. Возвращается знаковая дробная часть x. Це-
лая часть хранится в intptr как значение с плавающей точкой.

Пример:
C++
1
2
3
4
#include <cmath.h>
double x,y,n;
x = -14.87654321;
y = modf(x,&n); /* y = -0.87654321, n = -14.0 */
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
07.06.2008, 17:43     Определить, целое число хранится в переменной, или дробное #16
скажем есть переменная A,мне нужно чтоб прога определила целое в этой переменной число или дробное
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void) {
 
    float x = 4.0000000;
 
    print_bytes(x);
 
    float c = 4.00000001;
 
    print_bytes(c);
    while(!kbhit() );
 
return 0;
}
Ты что-то путаешь. Автор явно оговорил, что ему надо определить - целое или вещественное. А ты сравниваешь здесь вещественное с вещественным(float to float). Где логика?
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2220 / 735 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
07.06.2008, 17:44     Определить, целое число хранится в переменной, или дробное #17
блин.преобразование типов из float в int - отбрасывание дробной части.
ВСЕ,никаких modf не надо.хотя и можно,но есть шанс что она делает то же самое )
дробную часть можно достать с помощью вычитания из всего числа целой части.что и происходит - только без modf.не,предложение разумно,но это уход от проблемы - не понимания,что происходит за строками кода )

Добавлено через 1 минуту
[/quote]Ты что-то путаешь. Автор явно оговорил, что ему надо определить - целое или вещественное. А ты сравниваешь здесь вещественное с вещественным(float to float). Где логика?[/quote]
Кто тебе сказал,что в типе float не может храниться целое число?дай ему по башке,он дурак

у Автора есть КОНКРЕТНАЯ переменная.значит ее тип известен.поскольку в целой переменной не может быть дробного числа,
значит он говорит про дробную,в которой непонятно что
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
07.06.2008, 17:49     Определить, целое число хранится в переменной, или дробное #18
блин.преобразование типов из float в int - отбрасывание дробной части.
Покажи-ка мне, где ты в моём коде усмотрел отбрасывание дробной части ?
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2220 / 735 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
07.06.2008, 17:49     Определить, целое число хранится в переменной, или дробное #19
я про твой код не говорю.я говорю про свой
float x = ...
if(x-(int)x ==0) ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2008, 18:00     Определить, целое число хранится в переменной, или дробное
Еще ссылки по теме:

C++ Определить целое число или нет
C++ Как проверить что в переменной char хранится число?
C++ Ввести произвольное целое положительное число. Определить число с обратным порядком цифр заданного числа
Проверить, целое число или дробное C++
Вводится целое число определить простое оно или нет C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
07.06.2008, 18:00     Определить, целое число хранится в переменной, или дробное #20
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
я про твой код не говорю.я говорю про свой
float x = ...
if(x-(int)x ==0) ...
И ты утверждаешь, что он правильный ? Т. е. c его помощью можно определить, число вещественное или целое, так ?

Код
float x = 51.000;
int c = 51;
Разницу усмотрит твой код ?

P.S. Я опять же повторюсь, что автору нужен код, который сможет определить, какого вида число находится в переменной. Не забываем про это.
Yandex
Объявления
07.06.2008, 18:00     Определить, целое число хранится в переменной, или дробное
Ответ Создать тему
Опции темы

Текущее время: 03:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru