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

Округление дробового числа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
KennyLM
0 / 0 / 0
Регистрация: 17.07.2011
Сообщений: 4
17.07.2011, 18:07     Округление дробового числа #1
Здраствуйте . Нужно написать программку. У пользователя должны спросить какое число ввести надо, к примеру он введет 1.234567. Потом у пользователя спрашивают сколько оставить чисел, если 3 то должно получится 1.23, если 5 то 1.2346. Ну и округлить предведущие числа.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2011, 18:07     Округление дробового числа
Посмотрите здесь:

C++ округление числа до десятых
C++ Округление мелкого числа до 0
C++ Округление числа
Быстрое округление числа C++
C++ Вещественные числа и округление
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.07.2011, 20:22     Округление дробового числа #2
Не мудрствуя лукаво
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(void){
    double val;
    int pre;
    
    printf("Value: ");
    scanf("%lf", &val);
    printf("Precision: ");
    scanf("%d", &pre);
    printf("Result: %.*f\n", pre, val);
    
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
17.07.2011, 20:26     Округление дробового числа #3
Если интересен сам алгоритм округления, а не работа стандартных функций, то вот реализация
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream.h>
 
void main()
{
    cout<<"Vvedite chislo\t";
    double num;cin>>num;
    cout<<"Skolko chisel posle zapyatoi ostavit'?\r\n";
    int m;cin>>m;
    int celay_chast = 2*(num/2);
    num -= celay_chast;
    for(int i = 0; i < m; i++)
        num *= 10;
    int drobn_chast = num;
    if(4 < int(num*10 - drobn_chast*10))
        drobn_chast += 1;
    cout<<celay_chast<<"."<<drobn_chast<<"\r\n";
    //ÄîáГ*ГўГЁГ« äëÿ âîçìîæГ*îñòè ââîäГ* ñëåä Г·ГЁГ±ГҐГ«
    cout<<"Nazmite NUM1 dlya povtornogo vvoda\r\n";
    int iKEY;cin>>iKEY;
    if(iKEY == 1)
        main();
}
Миниатюры
Округление дробового числа  
nameless
17.07.2011, 20:32
  #4

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
if(iKEY == 1) 
    main();
Ох, и нехорошо же так делать..

-=ЮрА=-
Заблокирован
Автор FAQ
17.07.2011, 21:03     Округление дробового числа #5
Хорошо,как по другому реализовать повторное выполненте алгоритма?если вводить цикл-код усложняется,использовать безусловный переход,тоже не рекомендовано,а вот рекурсия иногда даже рекомендована или я не прав?мэйн в рамках указанной программы юзаю как рекурсивную функцию...
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
17.07.2011, 21:06     Округление дробового числа #6
Цитата Сообщение от nameless Посмотреть сообщение

Не по теме:


Ох, и нехорошо же так делать..

Более того, по стандарту - запрещено.
Хотя я с ТурбоС++ еще баловался...

Добавлено через 45 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Хорошо,как по другому реализовать повторное выполненте алгоритма?если вводить цикл-код усложняется,использовать безусловный переход,тоже не рекомендовано,а вот рекурсия иногда даже рекомендована или я не прав?мэйн в рамках указанной программы юзаю как рекурсивную функцию...
Надо просто написать отдельную рекурсивную функцию и вызвать ее в main().
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
18.07.2011, 03:01     Округление дробового числа #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
сам алгоритм округления

Не по теме:

Да разве ж это синкопа? Вот синкопа!
(с)


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>
 
#define ROUND(v, p) (floor(v * pow(10.0, p) + 0.5) / pow(10.0, p))
 
int main(void){
    double val;
    int precision;
    
    while ( printf("Value: ") && scanf("%lf", &val) == 1 && printf("Precision: ") && scanf("%d", &precision) == 1 )
        printf("Rounded value: %.10f\n", ROUND(val, precision));
    
    return 0;
}
При большом желании floor() и pow() тоже можно свои написать, зачем только?..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 04:31     Округление дробового числа
Еще ссылки по теме:

C++ Погрешность числа (округление)
Округление числа C++
Округление числа до двух цифр C++

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

Или воспользуйтесь поиском по форуму:
rrrFer
Заблокирован
18.07.2011, 04:31     Округление дробового числа #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если вводить цикл-код усложняется,использовать безусловный переход,тоже не рекомендовано,а вот рекурсия иногда даже рекомендована или я не прав
используйте цикл. Рекурсия - это большие издержки, связанные с активным использованием стека для сохранения значений локальных переменных перед вызовом функции, передачей аргументов функции и получения результата - все это через стек.
Стек не резиновый, да и инструкций больше.
Везде где можно надо рекурсию преобразовывать в цикл.
Yandex
Объявления
18.07.2011, 04:31     Округление дробового числа
Ответ Создать тему
Опции темы

Текущее время: 03:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru