Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 14

Как из числа типа double сделать int (сохранение целой и дробной части в отдельных целочисленных переменных)

17.12.2015, 02:53. Показов 5269. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например есть число
C++
1
double d = 123.4567
Как сделать что бы
C++
1
2
int i1 = 123;
int i2 =4567;
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2015, 02:53
Ответы с готовыми решениями:

Написать программу, которая выводит на экран значения переменных a, b, c (типа float) с пятью цифрами целой части и тремя - дробной.
Написать программу, которая выводит на экран значения переменных a, b, c (типа float) с пятью цифрами целой части и тремя - дробной. ...

Разделитель целой и дробной части числа ....
Привет. Подскажите, можно ли узнать с помощью какой-нибудь функции, какой разделитель целой и дробной части числа используется сейчас в...

Ввывод и целой части числа и дробной
C#, работа с формами.У меня в программе необходимо вывести х1 и х2 полностью, а не только целой части (т.е. х1 должно быть равно 4,5 (а не...

12
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.12.2015, 03:01
C++
1
2
3
4
5
6
7
double d = 123.4567
int i1 = d; //123
 
d = d - i1; //0.4567
d *=1000; //4567.0
 
int i2 = d; //4567
0
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 14
17.12.2015, 03:02  [ТС]
а если я не знаю, сколько точно будет чисел после комы?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.12.2015, 03:11
Цитата Сообщение от Mr_Psixopat_ Посмотреть сообщение
а если я не знаю, сколько точно будет чисел после комы?
все гораздо хуже, чем вы думаете: машины не умеют без погрешностей сохранять дробную часть числа.

в памяти компьютера 123.4567 может выглядеть как:
123.4567000001
или
123.4566999999

например.

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

для этого нужно научиться извлекать дробную часть с учетом погрешности,
и суметь представить её в виде целого числа.
1
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 14
17.12.2015, 03:24  [ТС]
в C++ нет аналога функции Frac в Delphi?
0
 Аватар для iRomul
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
17.12.2015, 05:09
Лучший ответ Сообщение было отмечено Mr_Psixopat_ как решение

Решение

здесь последний ответ может помочь, решение через строки.
Мой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
 
int main() {
    
    double num = 54.123132232;
    
    string num_s = to_string(num);
    
    auto point_pos = find(num_s.begin(), num_s.end(), '.');
    
    int integral = stol(string(num_s.begin(), point_pos));
    int fractal = stoul(string(point_pos + 1, num_s.end()));
    
    cout << integral << " " << fractal << endl;
    
    return 0;
}
Однако to_string(double) работает как %f по умолчанию и может отсекать часть знаков, нужно это учитывать. Также не учитываются NaN, Infinite и пр.
Запустить можно здесь
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
17.12.2015, 09:08
Цитата Сообщение от hoggy Посмотреть сообщение
d *=1000; //4567.0
*10000
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.12.2015, 09:15
Цитата Сообщение от iRomul Посмотреть сообщение
и может отсекать часть знаков
не может отсекать, а отсекает до шести знаков после точки.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
17.12.2015, 09:18
C++
1
2
char s[20];
sprintf(s, "%*.*f", w, prec, num);
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.12.2015, 09:19
Цитата Сообщение от iRomul Посмотреть сообщение
Также не учитываются NaN, Infinite и пр.
А здесь говорят обратное
As many digits are written as needed to represent the integral part, followed by the decimal-point character and six decimal digits.
inf (or infinity) is used to represent infinity.
nan (followed by an optional sequence of characters) to represent NaNs (Not-a-Number).

The representations of negative values are preceded with a minus sign (-).
0
 Аватар для iRomul
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
17.12.2015, 15:35
Kerry_Jr, речь шла о функциях stol(..) и stoul(..) - есть to_string(..) вернет inf или nan, то способ уже не сработает
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
17.12.2015, 16:28
Mr_Psixopat_, используй функцию modf из cmath
0
 Аватар для iRomul
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
17.12.2015, 16:43
Хулиган, modf просто отделяет вещественную часть от целой, а автору нужно, видимо, что бы вещественная часть была извлечена в целом виде.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2015, 16:43
Помогаю со студенческими работами здесь

Отделение целой части числа от дробной
деление любое дробное число например: 12.34 и эту цифру надо делить что бы в одном строке было написано 12,34 (то что мы набрали) ...

Даны 2 натуральных числа M и N.Вывести старшую цифру дробной части и младшую цифру целой части числа M/N
Помогите пожалуйста написать программки в VBA: 1)Даны натуральные числа М и N. Вывести старшую цифру дробной части и младшую цифру...

Даны натуральные числа М и N. Вывести старшую цифру дробной части и младшую цифру целой части числа M/N
Сделала программу по заданию, но почему-то результат выводит целочисленный, когда ввожу например числа 3 и 2. Результат должен получится...

Даны натуральные числа М и N. Вывести старшую цифру дробной части и младшую цифру целой части числа M/N
Даны натуральные числа М и N. Вывести старшую цифру дробной части и младшую цифру целой части числа M/N.Pascal

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru