Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
qwestcl
10 / 10 / 1
Регистрация: 30.09.2012
Сообщений: 172
#1

цифры после запятой - C++

02.11.2013, 23:22. Просмотров 943. Ответов 12
Метки нет (Все метки)

Нужно из float'ского типа достать значения после запятой.
к примеру имеем число 3.13 нужно получить в итоге int'овское 13.
учитывая:
целая часть всегда равна 3.
гарантировано то, что всегда есть дробная часть(или десятые или сотые).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 23:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос цифры после запятой (C++):

Цифры после запятой
Доброго времени. Есть код, в котором переменная res в итоге равняется, к...

Цифры после запятой
Уважаемые форумчаны, начал изучать С++, и вот столкнулся с такой проблемой: как...

Как получить цифры после запятой?
Не используя готовой функции. Нужен именно математический алгоритм, самый...

Как убрать последние две цифры после запятой?
Как убрать последние две цифры после запятой? остаток от деления? на с++

В строке имеется одна точка с запятой (;). Подсчитать количество символов до точки с запятой и после нее.
В строке имеется одна точка с запятой ( ; ). Подсчитать количество символов...

Почему после 51-го знака после запятой выводятся одни нули?
В продолжение темы: тот же код, только с увеличенным количеством знаков...

12
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
02.11.2013, 23:26 #2
Цитата Сообщение от qwestcl Посмотреть сообщение
целая часть всегда равна 3.
гарантировано то, что всегда есть дробная часть(или десятые или сотые).
int val=(3.13-3)*100, можно так вычислять!

int val=(peremenna_double - 3)*100
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 41
Регистрация: 26.12.2012
Сообщений: 382
02.11.2013, 23:27 #3
qwestcl, остатком от деления % - если нужна вся целая часть. Если нет - то переводить в строку и парсить как-нибудь нужные цифры
0
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,225
02.11.2013, 23:33 #4
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
qwestcl, остатком от деления % - если нужна вся целая часть.
в плавающих нет остатка от деления
Цитата Сообщение от qwestcl Посмотреть сообщение
к примеру имеем число 3.13 нужно получить в итоге int'овское 13.
учитывая:
целая часть всегда равна 3.
гарантировано то, что всегда есть дробная часть(или десятые или сотые).
ну и как доставать?
чему равны инты
у таких чисел
3.3
3.23
3.454
3.999999
1
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
02.11.2013, 23:35 #5
qwestcl, см функцию modf
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 41
Регистрация: 26.12.2012
Сообщений: 382
02.11.2013, 23:35 #6
ValeryS, воу-воу, и действительно - что-то меня понесло
0
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
02.11.2013, 23:37 #7
Да ладно он же вроде в условии всего только сотые, тысячных нет, то просто отак преобразовать да и все (3.13-3)*100 и получим 13, то что нада.
0
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,225
02.11.2013, 23:40 #8
ninja2,
а если будет 3.139 ???
округлять или нет?
а если только десятые
3.3
в ответе 3 или 30?
0
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
02.11.2013, 23:44 #9
C++
#include <iostream>
using std::cout;
using std::endl;
 
int main()
{
  float a = 3.91;
  a *= 100;
  int m = (int)a%10 == 0 ? (int)a/10-30 : (int)a-300;
  cout << m << endl;
}
Добавлено через 1 минуту
Цитата Сообщение от qwestcl Посмотреть сообщение
(или десятые или сотые)
гарантирует
1
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
03.11.2013, 00:00 #10
Цитата Сообщение от ValeryS Посмотреть сообщение
а если будет 3.139 ???
округлять или нет?
а если только десятые
3.3
в ответе 3 или 30?
Ну если так, то записать в строку и распарсить.
0
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,225
03.11.2013, 00:08 #11
Цитата Сообщение от ninja2 Посмотреть сообщение
Ну если так, то записать в строку и распарсить.
да нафига
programina, вон уже один ответ накидала, ты второй
я жду ответа от ТС чтобы правильно сделать
допустим можно так
C++
1
2
3
int a=(flt-3.0)*100;
if(a%10==0)
 a/=10;
если с округлением то так
C++
1
2
3
int a=(flt-3.0+0.005)*100;
if(a%10==0)
 a/=10;
0
qwestcl
10 / 10 / 1
Регистрация: 30.09.2012
Сообщений: 172
03.11.2013, 00:45  [ТС] #12
задача решена пользователем programina, спасибо.
а для чего добавляют именно это число 0.005при округлении?
0
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,225
03.11.2013, 00:49 #13
Цитата Сообщение от qwestcl Посмотреть сообщение
а для чего добавляют именно это число 0.005при округлении?
смотри число 0.123
нужно округлить до сотых и умножить на 100
получилось 12 (12.3--12 дробь отсекается )
теперь берем число 0.129
тоже получилось 12 (12.9--12) а нужно 13
добавляем 0.005
0.129+0.005=0.134*100=13.4--13
0.123+0.005=0.128*100=12.8--12
1
03.11.2013, 00:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 00:49
Привет! Вот еще темы с решениями:

При выводе числа с плавающей запятой теряются последние цифры
Доброго времени суток! Мне дано число 0,1025390625. double отрезает конец и...

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

нули после запятой
Остаток на начало месяца Сумма всех элементов взимается этого клиента в этом...

знаки после запятой
Здравствуйте, простой вопрос на который я никак не могу найти ответ. Почему...


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

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

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