Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

Проверить, целое число или дробное - C++
Ввожу в консоль значение 5.5, но ошибка не выдается (а должна). В чем проблема, почему не видит функцию? Попутный вопрос: кто-нибудь...

Почему при выводе имею целое число, а не дробное - C++
Здравствуйте. Почему при выводе имею целое число, а не дробное (как заказывали)? #include <iostream> using std::cout; using...

Как разделить переменую типа double на целое и дробное число ? - C++
Как разделить переменую типа double на целое и дробное число ? Добавлено через 23 минуты Нашол решение : #include <iostream> ...

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

Определить целое число или нет - C++
Необходимо определить, является ли число целым или нет. В цикле значение переменной изменяется с шагом 0.0001 И, допустим, если...

Как определить целое число или нет - C++
Можно как то определить какое число записано в переменной? скажем есть переменная double X; можно как то программно определить...

22
Lord_Voodoo
Супер-модератор
8594 / 2210 / 61
Регистрация: 07.03.2007
Сообщений: 10,970
Завершенные тесты: 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
Супер-модератор
8594 / 2210 / 61
Регистрация: 07.03.2007
Сообщений: 10,970
Завершенные тесты: 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
Супер-модератор
8594 / 2210 / 61
Регистрация: 07.03.2007
Сообщений: 10,970
Завершенные тесты: 1
06.06.2008, 11:20 #6
честно говоря, когда учился - только книгу по с++ до половины смог осилить, все остальное своим лбом пробивал, хотя ты прав - программист вечно учится...
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
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 / 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 - вроде и не целое, а программа показывает, что целое ..)
0
RainWolf
0 / 0 / 0
Регистрация: 06.06.2008
Сообщений: 5
07.06.2008, 12:53  [ТС] #10
а как тода сдалать????
0
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;
}
Способ определения - не панацея. Посмотри на формат хранения самих чисел.
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
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 / 1
Регистрация: 21.08.2007
Сообщений: 222
07.06.2008, 16:49 #13
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Прогнав - увидим,что программа не отличает числа 51.00..1 и 51. В таком случае,отделить дробное от целого вообще не представляется возможным,поскольку в памяти они идентичны.
Да ну.. В памяти идентичны ? Ты мой вышестоящий пример прогонял ? Смотрел ? Идентичны они в памяти ??? Ты хоть понял, что вообще этот пример показывает ?
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
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 / 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 */
0
07.06.2008, 17:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2008, 17:35
Привет! Вот еще темы с ответами:

Определить, является ли заданное целое число четным или нечетным - C++
Задачи для самостоятельной работы 1. Напишите программу, которая определяет, является ли заданное целое число четным или нечетным; 2....

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

Как проверить что в переменной char хранится число? - C++
Т.е. что там использованы только числа от 0 до 9 и нет букв?

Присвоить целой переменной day целое значение 1,2, …, 6 или 7 - C++
Пусть n - целое число от 1 до 365. Присвоить целой переменной day целое значение 1,2, …, 6 или 7 в зависимости от того, на какой день...


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

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

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