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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Округление числа 
V
    Опции темы
Samotnik
Дата 27.5.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Добрый день!
Любопытно узнать как можно округлить double число.

Тока варианты типа
Код

double x;
int a;
a = (int)x;

непредлагать т.к. это просто отсечение, а не округление!!!!!!!!
 smile 
PM MAIL   Вверх
Earnest
Дата 27.5.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



int a =  (int) (x > 0 ? x + 0.5 : x - 0.5);


--------------------
...
PM   Вверх
DigitSphinx
Дата 27.5.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Стандартных функций не знаю но первое что приходит в голову это написать функцию самому !
Перевести double в строку , если надо округлить до i-го знака берем (i + 1)-ый знак если он больше 5-ти то i-ый знак ++ , отскаем все после i-го знака , переводим опять в double и возвращаем юзверу )) smile 
P.S. на C++ писать легче чем на кириллице !  smile 

Цитата

int a =  (int) (x > 0 ? x + 0.5 : x - 0.5);

 smile 
и что получится ?

Это сообщение отредактировал(а) DigitSphinx - 27.5.2007, 19:03


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
nickless
Дата 27.5.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


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

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



Цитата(Samotnik @  27.5.2007,  17:27 Найти цитируемый пост)
округлить double число

Код

#include <cmath> (или math.h)
...
int bla = (int)round(7.78789);

?


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Samotnik
Дата 27.5.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



2 Earnet

Цитата(Earnest @  27.5.2007,  18:55 Найти цитируемый пост)
int a =  (int) (x > 0 ? x + 0.5 : x - 0.5); 

эээээээ......       
и какое отношение это имеет к округлению числа??????


PM MAIL   Вверх
Earnest
Дата 27.5.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(DigitSphinx @  27.5.2007,  20:01 Найти цитируемый пост)
и что получится ?

Стандартное округление: 3.67 округлиться до 4, а 3.45 - до 3.

nickless, нет в стандарте функции round


--------------------
...
PM   Вверх
Samotnik
Дата 27.5.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



2 nickless 
на round   ругается типа  
Error C2065: 'round' : undeclared identifier
 smile 
PM MAIL   Вверх
DigitSphinx
Дата 27.5.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Samotnik Тебе нужен результат типа int  или именно округление double’a до какой-то точности ?


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
Samotnik
Дата 27.5.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



2 DigitSphinx 
Округление double   !!!!! int  не причем!!!
PM MAIL   Вверх
Earnest
Дата 27.5.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Samotnik, чего орать-то smile 
Учись вопросы задавать нормально. Под "просто" округлением обычно понимают именно округление до int.
Округление double до заданной точности можно сделать так:
Код

double Round (double v,double GRID)
{
   return floor(v / GRID + 0.5) * GRID;
}

Где GRID - требуемая точность, скажем, 0.001.



--------------------
...
PM   Вверх
Samotnik
Дата 27.5.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



2 Earnest
Цитата(Earnest @  27.5.2007,  19:39 Найти цитируемый пост)
чего орать-то 

Я вообще-то  не ору !!!!!  Я вполне спокоен слушаю  LedZeppelin Stairway To Heaven
Вод!   smile  smile 


Цитата(Earnest @  27.5.2007,  19:39 Найти цитируемый пост)
Учись вопросы задавать нормально

Я умею вопросы задовать!!!!  вопрос типа


Цитата(Samotnik @  27.5.2007,  18:27 Найти цитируемый пост)
Любопытно узнать как можно округлить double число

ИМХО вполне вменяемый и понятный.

Проще только вот так-вот можно:
Как из числа 3.99999   получить 4,  из 12. 3  получить 12  !!!
Так понятнее?
PM MAIL   Вверх
Romikgy
Дата 27.5.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



имхо 
для этого
Цитата(Samotnik @  27.5.2007,  18:53 Найти цитируемый пост)
Как из числа 3.99999   получить 4,  из 12. 3  получить 12  !!!

подойдет и это
Цитата(Earnest @  27.5.2007,  17:55 Найти цитируемый пост)
int a =  (int) (x > 0 ? x + 0.5 : x - 0.5); 




--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Любитель
Дата 27.5.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(Romikgy @  27.5.2007,  20:20 Найти цитируемый пост)
подойдет и это

Причём лучше всего smile


--------------------
PM MAIL ICQ Skype   Вверх
Earnest
Дата 28.5.2007, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Romikgy, сейчас Samotnik опять спросит "при чем тут int!"
Это жара, наверное ...  smile  


--------------------
...
PM   Вверх
codelord
Дата 28.5.2007, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



может поможет, функция (,,) и пример ее использования
Код

#include <iostream>
#include <math.h>
using namespace std;
double round( double val, int dem  ) {   // 4.99 49.9
 val *= pow( 10, dem );
 val = floor( val + 0.5 );
 val /= pow( 10, dem );
 return val;
}
 int main( int argc, char **argv )
{
 double m = 4.9856;
 cout << round( m, 0 ) << endl;    //4.9856 5.0
 cout << round( m, 2 ) << endl;    //4.9856 4.99
 cout << round( m, 3 ) << endl;    //4.9856 4.986
 m = 123.99992234532;
 cout << round( m, 2 ) << endl; // 123.99992234532 124.00;
 m = 123.099992234532;
 cout << round( m, 2 ) << endl; // 123.099992234532 123.1;
 return 0; 
}



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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