Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/222: Рейтинг темы: голосов - 222, средняя оценка - 4.65
19 / 19 / 2
Регистрация: 30.11.2010
Сообщений: 164
1

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

06.03.2011, 15:09. Показов 46139. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как округлить число до целого я знаю,
C++
1
s=(s-floor(s)<0.5)?floor(s):ceil(v)
а как округлить, скажем, число 3.4643 до 3.5 ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2011, 15:09
Ответы с готовыми решениями:

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

Округление ответа до десятых
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { double a,b,c,d;...

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

Округление числа
Если разложение в ряд тейлора и поиск сумы и заданая точность е.И вот нам надо округлить сумму...

12
Заблокирован
06.03.2011, 15:15 2
Умножить на 10
Округлить до целого
Поделить на 10
1
19 / 19 / 2
Регистрация: 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
0
Заблокирован
06.03.2011, 15:36 4
Проблема известная.
Чтобы наверняка ее избежать, лучше работать со строкой, а не с числом.
1
19 / 19 / 2
Регистрация: 30.11.2010
Сообщений: 164
06.03.2011, 15:39  [ТС] 5
Цитата Сообщение от IrineK Посмотреть сообщение
Проблема известная.
Чтобы наверняка ее избежать, лучше работать со строкой, а не с числом.
это как?
0
Заблокирован
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, т.е. можно в формальной задаче округления обойтись и без длинной арифметики.

Если будут вопросы по технике реализации - задавай.
1
19 / 19 / 2
Регистрация: 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, т.е. можно в формальной задаче округления обойтись и без длинной арифметики.

Если будут вопросы по технике реализации - задавай.
попробую
0
3564 / 2711 / 347
Регистрация: 11.03.2009
Сообщений: 6,236
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.
1
Заблокирован
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;
}
1
3564 / 2711 / 347
Регистрация: 11.03.2009
Сообщений: 6,236
06.03.2011, 16:34 10
Или еще проще
C++
1
2
3
s *= 10;
s = floor(s+0.5);
s /= 10;
1
19 / 19 / 2
Регистрация: 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;
        }
реализовал вот так, вроде бы все работает правильно, всем спасибо)
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 4
27.07.2017, 10:31 12
Привет всем. Начитался я вашего кода по самое не могу. Если вам надо вывести на экран, либо в файл округленное значение кокого-то числа number, то смотрите код ниже

C++
1
2
3
4
5
6
7
8
9
#include <iostream> //в файле объявлен fixed
#include <iomanip> //подключаем setprecision
 
int main()
{
    float number = 3.141592654;
 
    cout << fixed {- если нужны нули в конце числа} << setprecision(2) {2 два знака после запятой};
}
Profit! На выходе получаем 3.14 - число пи. Вот оно как просто.
0
Эксперт С++
3701 / 2835 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
27.07.2017, 14:32 13
Цитата Сообщение от ЮрийМ Посмотреть сообщение
Начитался я вашего кода...
2011 года...

Цитата Сообщение от ЮрийМ Посмотреть сообщение
либо в файл округленное значение кокого-то числа number, то смотрите код ниже
C++
1
2
3
4
5
6
#include <stdio.h>
 
int main() {
    float number = 3.141592654;
    printf("%.2f", number);
}
и не надо никаких фикседов, когда есть обычное форматирование строк.
0
27.07.2017, 14:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2017, 14:32
Помогаю со студенческими работами здесь

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

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

Округление до ближайшего числа
Есть тип double, и есть установка, которая указывает какой шаг должен быть кратен для числа после...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru