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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 145, средняя оценка - 4.90
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
#1

округление числа до десятых - C++

06.03.2011, 15:09. Просмотров 18844. Ответов 10
Метки нет (Все метки)

Как округлить число до целого я знаю,
C++
1
s=(s-floor(s)<0.5)?floor(s):ceil(v)
а как округлить, скажем, число 3.4643 до 3.5 ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2011, 15:09     округление числа до десятых
Посмотрите здесь:

Округление числа double до десятых, до сотых - C++
Приветствую всех, double y=3.1415; нужно округлить y до десятых и сотых, записать в переменные соответственно. т.е. получить 0.1 и...

Округление числа - C++
Кто-нибудь может подробно-подробно объяснить, как округлять числа в C++. А то я то, что причитал, ничего не понял. Вот у меня...

Округление числа - C++
Не пойму, почему компилятор пишет Выражение должно иметь целочисленный или перечисляемый тип. Код для округления числа float...

Вещественные числа и округление - C++
Или я туплю, или долго сижу, но вот никак не могу решить такую задачу: есть диапазон (напр. от 88 до 88.5), нужно в цикле обойти этот...

Округление мелкого числа до 0 - C++
Всем привет, времени мало поэтому пишу сюда суть такова - нужно сделать перемножение матриц 3х3 типа double потом вывести на экран ...

Погрешность числа (округление) - C++
Всем привет,есть алгоритм в котором производится операция умножения часто. В конечном итоге я получаю ответ равный 1, а верный ответ...

Округление дробового числа - C++
Здраствуйте . Нужно написать программку. У пользователя должны спросить какое число ввести надо, к примеру он введет 1.234567. Потом у...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
06.03.2011, 15:15     округление числа до десятых #2
Умножить на 10
Округлить до целого
Поделить на 10
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
06.03.2011, 15:26  [ТС]     округление числа до десятых #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
double s;
cin>>s;
s=floor(s*10)/10;
cout<<s;
return 0;
}
округляет 5.67 до 5.6

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
double s;
cin>>s;
s=ceil(s*10)/10;
cout<<s;
return 0;
}
округляет 5.33 до 5.4
IrineK
Заблокирован
06.03.2011, 15:36     округление числа до десятых #4
Проблема известная.
Чтобы наверняка ее избежать, лучше работать со строкой, а не с числом.
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
06.03.2011, 15:39  [ТС]     округление числа до десятых #5
Цитата Сообщение от IrineK Посмотреть сообщение
Проблема известная.
Чтобы наверняка ее избежать, лучше работать со строкой, а не с числом.
это как?
IrineK
Заблокирован
06.03.2011, 15:51     округление числа до десятых #6
Переводишь число в строку, например так:
C++
1
2
3
4
5
6
double a;
char a_str[80];
/*.....
где-то здесь считаем а
...*/
sprintf_s(a_str,"%18.17f",a);//максимальная точность - 18 значащих цифр
Теперь анализируем строку на разделитель (.).
Если необходимо округлить до десятых, берем первый и второй символ после (.). Переводим их в числа.
Пишем простой if (если второе уже число от 0 до4 - с первым ничего не делаем; в противном случае - к первому прибавляем 1).

Этот алгоритм можно применять для правильного округления в любом знаке.
Что интересно, если число вводится с консоли, оно может сразу обрабатываться как строка, и в этом случае ее длина - 256, т.е. можно в формальной задаче округления обойтись и без длинной арифметики.

Если будут вопросы по технике реализации - задавай.
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
06.03.2011, 15:55  [ТС]     округление числа до десятых #7
Цитата Сообщение от IrineK Посмотреть сообщение
Переводишь число в строку, например так:
C++
1
2
3
4
5
6
double a;
char a_str[80];
/*.....
где-то здесь считаем а
...*/
sprintf_s(a_str,"%18.17f",a);//максимальная точность - 18 значащих цифр
Теперь анализируем строку на разделитель (.).
Если необходимо округлить до десятых, берем первый и второй символ после (.). Переводим их в числа.
Пишем простой if (если второе уже число от 0 до4 - с первым ничего не делаем; в противном случае - к первому прибавляем 1).

Этот алгоритм можно применять для правильного округления в любом знаке.
Что интересно, если число вводится с консоли, оно может сразу обрабатываться как строка, и в этом случае ее длина - 256, т.е. можно в формальной задаче округления обойтись и без длинной арифметики.

Если будут вопросы по технике реализации - задавай.
попробую
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
06.03.2011, 16:09     округление числа до десятых #8
Цитата Сообщение от Valerko Посмотреть сообщение
округляет 5.67 до 5.6
Цитата Сообщение от IrineK Посмотреть сообщение
Умножить на 10
Округлить до целого
Поделить на 10
Цитата Сообщение от Valerko Посмотреть сообщение
Как округлить число до целого я знаю,
А теперь все вместе
C++
1
2
3
s *= 10;
s=(s-floor(s)<0.5)?floor(s):ceil(v);
s /= 10;
Если надо округлить до n-го знака то умножать и делить надо на 10^n.
IrineK
Заблокирован
06.03.2011, 16:14     округление числа до десятых #9
Если задача конкретная и простая - округлить до десятых и со строками возиться неохота, вот решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
 
int main()
{
    double x;
    cout<<"X = ";
    cin>>x;
    x=x*1000;//берем три цифры после запятой (одну запасную из-за возможной потери данных
                //при преобразовании типов)
    int remn=((int)abs(x)%100)/10;//обрабатываем вторую
    if(remn>4 && remn<10) //реагируем на вторую цифру от 5 до 9
        if(x>0) x+=100;
        else  x-=100;//если округляем отрицательное число
    
    int y=(int)x/100;//берем число с округленной первой цифрой
    x=(double)y/10;//ответ
    cout<<"Rounded X = "<<x;
    return 0;
}
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
06.03.2011, 16:34     округление числа до десятых #10
Или еще проще
C++
1
2
3
s *= 10;
s = floor(s+0.5);
s /= 10;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2011, 16:45     округление числа до десятых
Еще ссылки по теме:

Быстрое округление числа - C++
Здравствуйте уважаемые программисты! Подскажите как быстрее всего округлить число? double a = 4.78531 необходимо получить a = 4.80000...

Округление числа до двух цифр - C++
Привет) Я только начинаю изучать С++, и вот столкнулся с очень важным вопросом... Как мне округлить число (double) до 2х цыфр после...

Округление числа до ближайшего целого - C++
Часто видел в темах в вопросом &quot;как округлить до ближайшего целого&quot; ответы вроде &quot;использовать функцию a=floor(a+0.5); или a=round(a); ...

Округление вещественного числа до заданного количества знаков - C++
Что тут неправильно??? не воспринимает переменную r r - количество знаков после десятичной точки #include &lt;iostream&gt; #include...

Округление числа до n знаков после десятичной точки - C++
Решил задачу для новичков по C++. Задача совсем для зелёных новичков, кто только-только начал изучать C++, и у меня есть ощущение, что её...


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

Или воспользуйтесь поиском по форуму:
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
06.03.2011, 16:45  [ТС]     округление числа до десятых #11
Цитата Сообщение от IrineK Посмотреть сообщение
Если задача конкретная и простая - округлить до десятых и со строками возиться неохота, вот решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
 
int main()
{
    double x;
    cout<<"X = ";
    cin>>x;
    x=x*1000;//берем три цифры после запятой (одну запасную из-за возможной потери данных
                //при преобразовании типов)
    int remn=((int)abs(x)%100)/10;//обрабатываем вторую
    if(remn>4 && remn<10) //реагируем на вторую цифру от 5 до 9
        if(x>0) x+=100;
        else  x-=100;//если округляем отрицательное число
    
    int y=(int)x/100;//берем число с округленной первой цифрой
    x=(double)y/10;//ответ
    cout<<"Rounded X = "<<x;
    return 0;
}
мне нужно округлить значения 2х динамических массивов до десятых =)

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
    for(int j=0;j<n;j++)//округляем L,B до десятых
        {
        L[j]*=10;
        L[j]=floor(L[j]+0.5);
        L[j]/=10;
        B[j]*= 10;
        B[j]=floor(B[j]+0.5);
        B[j]/=10;
        }
реализовал вот так, вроде бы все работает правильно, всем спасибо)
Yandex
Объявления
06.03.2011, 16:45     округление числа до десятых
Ответ Создать тему
Опции темы

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