Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
1

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

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

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

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

Проверить, целое число или дробное
Ввожу в консоль значение 5.5, но ошибка не выдается (а должна). В чем проблема,...

Разделить дробное число на целое и остаток
Есть дробное число, например 14.4054 Нужно убрать в отдельную переменную целую...

Почему при выводе имею целое число, а не дробное
Здравствуйте. Почему при выводе имею целое число, а не дробное (как...

Как разделить переменую типа double на целое и дробное число ?
Как разделить переменую типа double на целое и дробное число ? Добавлено...

Поле first - целое число, длительность телефонного разговора в минутах; поле second - дробное число, стоимость одной минуты в гривнах
Поле first - целое число, длительность телефонного разговора в минутах; поле...

22
Lord_Voodoo
Супер-модератор
8609 / 2239 / 133
Регистрация: 07.03.2007
Сообщений: 10,827
Завершенные тесты: 1
06.06.2008, 10:48 2
чтобы делить до заданной точности используй округления, а вот про есть ли дробная функция - можно в принципе пойти примитивно, конвертнуть в строку и глянуть ,а есть ли разделитель....
0
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
06.06.2008, 10:52  [ТС] 3
f gj rfrjq kbnht exbimcz&&&

Добавлено через 44 секунды
а по какой литре учишься??
0
Lord_Voodoo
Супер-модератор
8609 / 2239 / 133
Регистрация: 07.03.2007
Сообщений: 10,827
Завершенные тесты: 1
06.06.2008, 11:10 4
в смысле по какой? мне мсдн и хелпа билдера хватает... а что?
а я что-то не то сказал? сказал так, как бы сам писал прогу...
0
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
06.06.2008, 11:19  [ТС] 5
нет.мне интереснол по каким книгам ты учишься.я то тоже учусь
0
Lord_Voodoo
Супер-модератор
8609 / 2239 / 133
Регистрация: 07.03.2007
Сообщений: 10,827
Завершенные тесты: 1
06.06.2008, 11:20 6
честно говоря, когда учился - только книгу по с++ до половины смог осилить, все остальное своим лбом пробивал, хотя ты прав - программист вечно учится...
0
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
06.06.2008, 17:19 7
Если ты говоришь про переменную типа float/double делай так:
float x =51.101;
if( x- (int)x == 0) // целая!
else дробная!

приведение к типу int - отбрасывает дробную часть.если без дробной части значение переменной не меняется,она и была целая.
0
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
06.06.2008, 17:30  [ТС] 8
спасибо)
0
igor_nf
118 / 12 / 3
Регистрация: 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 - вроде и не целое, а программа показывает, что целое ..)
0
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
07.06.2008, 12:53  [ТС] 10
а как тода сдалать????
0
igor_nf
118 / 12 / 3
Регистрация: 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;
}
Способ определения - не панацея. Посмотри на формат хранения самих чисел.
0
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
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. В таком случае,отделить дробное от целого вообще не представляется возможным,поскольку в памяти они идентичны.
0
igor_nf
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
07.06.2008, 16:49 13
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Прогнав - увидим,что программа не отличает числа 51.00..1 и 51. В таком случае,отделить дробное от целого вообще не представляется возможным,поскольку в памяти они идентичны.
Да ну.. В памяти идентичны ? Ты мой вышестоящий пример прогонял ? Смотрел ? Идентичны они в памяти ??? Ты хоть понял, что вообще этот пример показывает ?
0
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
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;
}
0
Jafa
50 / 50 / 13
Регистрация: 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 */
0
igor_nf
118 / 12 / 3
Регистрация: 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). Где логика?
0
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
07.06.2008, 17:44 17
блин.преобразование типов из float в int - отбрасывание дробной части.
ВСЕ,никаких modf не надо.хотя и можно,но есть шанс что она делает то же самое )
дробную часть можно достать с помощью вычитания из всего числа целой части.что и происходит - только без modf.не,предложение разумно,но это уход от проблемы - не понимания,что происходит за строками кода )

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

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

Определить целое число или нет
Необходимо определить, является ли число целым или нет. В цикле значение...

Как определить целое число или нет
Можно как то определить какое число записано в переменной? скажем есть...

Вводится целое число определить простое оно или нет
Помогите решить задачу. Вводится целое число определить простое оно или нет.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru