Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Привести к типу int и округлить 
V
    Опции темы
Robix
Дата 20.11.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Допустим у меня есть число вот такое типа double:
153011,83306941
Мне нужно получать из него числа  153011  и 153012 типа int
Как это лучше сделать.

И еще, можно как-нибудь спросить, сколько чисел после запятой у числа дробного


PM MAIL   Вверх
sQu1rr
Дата 20.11.2009, 20:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



1.
Код

double dNum = 153011.83306941;
int iNum = int( dNum );

2.
Код

double dNum = 153011.83306941;
int iNum = int( dNum );
if( dNum - iNum >= 0.5 )
    iNum++;

3. Могу предложить так:
Код

double dNum = 153011.83306941;
int iNum = int( dNum );
dNum -= iNum; // Остается только дробная часть
size_t iCount = 0;
while( dNum != 0 ) {
    dNum *= 10;
    dNum -= int( dNum );
    iCount++;
}

Но, увы такой способ будет работать неправильно, так как тип double - неточный тип, и число 153011.83306941 запишется как чтото типа 153011.833069410000000003242389 вообщем исчо дофига цифр, и в вышем случае выдаст результат 34 числа. Другого способа не знаю. Если бы double был бы точен, то способ работал бы нормально

Это сообщение отредактировал(а) sQu1rr - 20.11.2009, 20:35
PM MAIL Skype GTalk   Вверх
Robix
Дата 20.11.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Спасибо большое sQu1rr .
У меня вот что еще происходит.
double dNum = 153011.83306941;
double Result = round(dNum);  // вот так работает и округляет до 153012

Но когда выполняю round(dNum,1) то пишет, что слишком много аргументов в round
Вроде как round может округлять и оставлять количество чисел после запятой
Мож компилятор не поддерживает ?

PM MAIL   Вверх
bsa
Дата 21.11.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



В документации к этой стандартной функции указан только один параметр:
Цитата(man round)
SYNOPSIS
       #include <math.h>

       double round(double x);

PM   Вверх
Alca
Дата 21.11.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



sprintf


--------------------
PM WWW ICQ Skype Jabber   Вверх
W4FhLF
Дата 21.11.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



А функции floor и ceil не подойдут?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Robix
Дата 24.11.2009, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Теперь понял. Меня так устроило:

Код

double round_ ( double alpha, int precision)
{
double beta = pow (10, precision); 
return round (alpha * beta) / beta;     
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.