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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 5.00
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
#1

Как преобразовать дробную часть числа типа double в int - C++

14.06.2011, 13:46. Просмотров 4053. Ответов 10
Метки нет (Все метки)

Есть дробное число, например Z = 123,456
нужно разбить его на два целых числа
int I = 123
int F = 456
как это можно сделать ?
я придумал только
I= Z
F= (Z - I) * 10
но так в F запишется только 4
56 потеряется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2011, 13:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как преобразовать дробную часть числа типа double в int (C++):

Преобразовать double в два int: целую и дробную части - C++
Если найдется добрый человек, который напишет небольшую функцию, которая float поделит на 2 int, целую часть и дробную соответственно,...

Преобразовать 2 числа int в 1 число float(double) | double int1.int2 - C++
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! - C++
Вот программулька: #include <iostream> using namespace std; #include <conio.h> int main() { double arr={1,2,3,4,5}; ...

Можно ли из числа типа double получить 2 числа типа int? - C++
Если можно, то напишите пожайлуста название функции или способ.

Как из числа типа double сделать int (сохранение целой и дробной части в отдельных целочисленных переменных) - C++
Например есть число double d = 123.4567 Как сделать что бы int i1 = 123; int i2 =4567;

Как преобразовать часть массива char в double - C++
есть большой массив char в нем есть несколько элементов которые нужно преобразовать в число типа double например char X; ...

10
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
14.06.2011, 13:53 #2
гуглится за пять секунд
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.06.2011, 13:55 #3
У меня что-то такое получилось. Можно еще вытаскивать до нуля, но если будет, например 1.203
то 3 обрежется.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
int main(){
    double d = 123.5;
    int a = d,b;
    d-=a;
    int t=2;  //точность
    while (t--) d*=10;
    b = d;
    std::cout << a << '.' << b;
    return 0;
}
Но из-за кривости вещественных чисел иногда немного не те значения получатся будут, например 12.6 с точностью 2 перекачует в 12.5(9)
0
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
14.06.2011, 14:32  [ТС] #4
что такое b в int a = d,b; ??
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.06.2011, 14:35 #5
Будущая дробная часть.
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.06.2011, 14:42 #6
modf
http://www.cplusplus.com/reference/clibrary/cmath/modf/
0
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 14:45 #7
Следующие сообщ. верно )
0
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
14.06.2011, 14:50  [ТС] #8
Цитата Сообщение от tylix Посмотреть сообщение
F = (Z - I) * 1000 тогде не потеряется
а если будет равно не Z = 123,456
а 4,5 будет совсем другое значение не 5 а 500

Добавлено через 1 минуту
Цитата Сообщение от OstapBender Посмотреть сообщение
будет тоже самое что и F= (Z - I) * 10
как мне избавиться от 0
0
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 14:52 #9
Цитата Сообщение от Sylvos Посмотреть сообщение
а если будет равно не Z = 123,456
а 4,5 будет совсем другое значение не 5 а 500

Добавлено через 1 минуту

будет тоже самое что и F= (Z - I) * 10
как мне избавиться от 0
млин че ты паришь. какая разница 5 или 500 это же после точки будет?
при обратной конвертации ты и делить будешь на 1000
0.500 = 0.5

Вопрос в другом где ты собрался это применять?
0
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
14.06.2011, 14:58  [ТС] #10
Цитата Сообщение от tylix Посмотреть сообщение
млин че ты паришь. какая разница 5 или 500 это же после точки будет?
при обратной конвертации ты и делить будешь на 1000
0.500 = 0.5

Вопрос в другом где ты собрался это применять?
Создать класс CDecimal - дробное число

Поля:
- int целая часть;
- int дробная часть.

Методы:
- Конструктор по умолчанию;
- Конструкторы преобразования из:
- short;
- bool;
- long;
- int;
- float;
- double;
- char;
- char*.
- Конструктор копирования;
- Установка целой части;
- Установка дробной части;
- Установка целой и дробной частей с параметрами типа int;
- Установка целой и дробной частей с параметром типа double;
- Возврат числа в виде double;
- Возврат целой части;
- Возврат дробной части;
- Возврат числа в виде строки.

Перегрузка:
- +
- -
- *
- /
- +=
- -=
- *=
- /=
- ++ (постфиксный и префиксный)
- -- (постфиксный и префиксный)
- =
0
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 15:10 #11
У тебя не возникнит проблем с дробной частью равной 500 или 50 или 5
главное что бы учитывалась точность дробной части (сотые, тысячные, или 10000)

главное не проводить арифм. операц. без обр. преобр.
0
14.06.2011, 15:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2011, 15:10
Привет! Вот еще темы с ответами:

Как получить дробную часть числа с плавающей точкой? - C++
Допустим, перед тем как вызвать функцию факториала, мне необходимо совершить проверку аргументов. Чтобы проверить, целое ли число, мне...

Как взять дробную часть числа и записать в переменную на C++ - C++
как взять дробную часть числа и записать в переменную на C++

Как преобразовать все int,float,double в строки LPWSTR, LPCTSTR - C++
Столкнулся с проблемой не как не переведу в нормальный вид вот код #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include...

Напишите программу, которая получает число типа long double и выводит его целую и дробную части - C++
мое решение #include&lt;stdio.h&gt; #include&lt;math.h&gt; int main() { long double x;// = 23.234; scanf(&quot;%Lf&quot;, &amp;x); long...


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

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

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