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

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

Войти
Регистрация
Восстановить пароль
 
Sultik_Zaka
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 59
#1

Вывести ответ с заданной точностью - C++

20.10.2016, 13:47. Просмотров 189. Ответов 11
Метки нет (Все метки)

Привет! Зачастил я тут ;(
В общем, не могли бы помочь?
Требуется сделать вывод ответа с точностью до 10^(-9), например:

Output:
4.0

Output:
1.5

Output:
2.714285714

Единственное, что придумал:
C++
1
2
3
4
5
6
7
8
9
10
    double x = sum/count;
    bool isInt=((x/1000)==0);
    if(isInt == true)
    {
        cout << sum/count<<".0"<<endl;
    }
    else
    {
        cout << fixed << setprecision(9) << sum/count << endl;
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SpBerkut
Объявлятель переменных
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
20.10.2016, 13:52     Вывести ответ с заданной точностью #2
И в чём вопрос-то?
nmcf
4944 / 4282 / 1431
Регистрация: 14.04.2014
Сообщений: 16,801
20.10.2016, 13:52     Вывести ответ с заданной точностью #3
И что не устраивает?
Sultik_Zaka
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 59
20.10.2016, 14:55  [ТС]     Вывести ответ с заданной точностью #4
Выводит-то все равно, к примеру, 4.000000000, а не 4.0
А надо именно 4.0
Ну или, допустим, если ответ 3.78, то и вывести надо 3.78, а не 3.78000000
SpBerkut
Объявлятель переменных
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
20.10.2016, 15:12     Вывести ответ с заданной точностью #5
Цитата Сообщение от Sultik_Zaka Посмотреть сообщение
Выводит-то все равно, к примеру, 4.000000000
Так всё правильно. 4/1000 = 0.004, что в свою очередь не равно нулю.

C++
1
2
3
4
5
6
7
8
9
10
11
double x = sum/count;       // вычислили частное
bool isInt=((x/1000)==0);   // тут, Вы пытаетесь проверить на равенство 0 результат деления x на 1000
// Это бессмысленно, т.к. проще проверить x == 0
if(isInt == true) // сравнивать bool с true тоже лишнее. if (isInt) и вся печаль
{
    cout << sum/count<<".0"<<endl;
}
else
{
    cout << fixed << setprecision(9) << sum/count << endl;
}
Напишите, чего вы пытаетесь добиться от программы. Мы ж поможем.
Sultik_Zaka
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 59
20.10.2016, 15:22  [ТС]     Вывести ответ с заданной точностью #6
sum/count у меня может равняться как 4, так и 2.337373745 (к примеру)
у меня выходит так, что 4 выводит как 4.000000000, а 2.337373745 правильно, как 2.337373735
а надо, чтоб 4 выводило как 4.0
1.5 как 1.5
3.25 как 3.25
без лишних нулей
nmcf
4944 / 4282 / 1431
Регистрация: 14.04.2014
Сообщений: 16,801
20.10.2016, 16:20     Вывести ответ с заданной точностью #7
Тогда сохраняй в строку и удаляй нули перед выводом.
SpBerkut
Объявлятель переменных
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
20.10.2016, 16:53     Вывести ответ с заданной точностью #8
Как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <iomanip>
#include <cmath>
 
bool isInt(const double x) {
    return fabs(x - floor(x))<1e-10;
}
 
int main()
{
    double x = sqrt(4.1);
        
    if (isInt(x)) {
        std::cout << std::fixed << std::setprecision(1) << x << std::endl;
    } else {
        std::cout << std::setprecision(9) << x << std::endl;
    }
    
    x = sqrt(4.0);
        
    if (isInt(x)) {
        std::cout << std::fixed << std::setprecision(1) << x << std::endl;
    } else {
        std::cout << std::setprecision(3) << x << std::endl;
    }
}
nmcf
4944 / 4282 / 1431
Регистрация: 14.04.2014
Сообщений: 16,801
20.10.2016, 17:10     Вывести ответ с заданной точностью #9
SpBerkut, он хочет, чтобы нулей не было в конце, кроме одного нуля у целых.
Sultik_Zaka
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 59
22.10.2016, 14:01  [ТС]     Вывести ответ с заданной точностью #10
Ребят?
nmcf
4944 / 4282 / 1431
Регистрация: 14.04.2014
Сообщений: 16,801
22.10.2016, 14:31     Вывести ответ с заданной точностью #11
C++
1
2
3
4
5
6
7
    std::ostringstream oss;
    oss << fixed << setprecision(9) << sum / count;
    std::string s = oss.str();
    size_t p = s.find_last_not_of('0');
    if (s[p] == '.') s.erase(p + 2);
    else s.erase(p + 1);
    cout << s << endl;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2016, 19:35     Вывести ответ с заданной точностью
Еще ссылки по теме:

Сумма с заданной точностью C++
Вычисления с заданной точностью C++
Округление с заданной точностью C++
Вывод с заданной точностью C++
C++ Вычислить с заданной точностью значение заданной комплексной функции

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4880 / 3016 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
22.10.2016, 19:35     Вывести ответ с заданной точностью #12
Цитата Сообщение от Sultik_Zaka Посмотреть сообщение
Ребят?
Что непонятно? Вам уже кучу вариантов предложили.
Yandex
Объявления
22.10.2016, 19:35     Вывести ответ с заданной точностью
Ответ Создать тему
Опции темы

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