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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
#1

Насчёт числа знаков после запятой - C++

11.01.2013, 21:54. Просмотров 3739. Ответов 32
Метки нет (Все метки)

Вот например у меня массив с числами, у которых по 5 знаков после запятой. Как мне (с помощью какой функции или операции) сделать так чтобы у этих чисел, было по 3 знака после запятой двумя способами (сначала округлялось, а вторым способом не округлялось до тысячной. Заметьте мне надо чтобы значение чисел стало таким, а не просто показывалась тысячная доля. Например такие функции как cout.precision и printf мне не помогут.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 21:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Насчёт числа знаков после запятой (C++):

Округление числа до двух знаков после запятой - C++
8. Написать программу, которая предлагает пользователю ввести дробное число, округляет его до двух знаков после запятой и выводит результат...

Функция round(), округление числа до 4-х знаков после запятой - C++
Вот наткнулся на проблемку как округлить число до 4 знаков после запятой? Подскажите что делать?

Точность в N знаков после запятой числа типа double - C++
Добрый день, уважаемы форумчане! Возникла проблема, заключающаяся в изменении значения, получающегося в результате выполнения функции...

Вывод числа с ограниченным количеством знаков после запятой - C++
float m; m = (6.0221412927*pow(10,23.0))/23; cout <<"Количество атомов в 1 мг Натрия = "<<m<<endl<<endl; Как...

Округление числа в строке до указанного количества знаков после запятой - C++
Как делать округление в строке, до знака после запятой порядковый номер который задаёт пользователь с клавиатуры

Число знаков после запятой - C++
Никогда не задумывался, но можно-ли ограничить число знаков во флоате, не для вывода, а для рассчетов?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
11.01.2013, 22:32 #2
setprecision, setw, не?
0
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 05:06  [ТС] #3
Цитата Сообщение от Дмитрий 93 Посмотреть сообщение
setprecision, setw, не?
Вы меня не поняли... Объясню по другому..
Вот дано значение
C++
1
2
3
4
5
6
//дано число а
a=14.23788
//требуемое число (1 способ)
a1=14.238
//требуемое число (2 способ)
a2=14.237
Опять же замечю мне не надо выводить, мне надо дать такое значение числам а1 и а2
0
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
12.01.2013, 05:40 #4
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
 
    double a = 14.23788;
    double c = ( (float) ( ( (int) ((a + 0.0005) * 1000) ) / 1000.0 ) );
    
    cout << a << endl << c << endl;
 
 
   return 0;
}
http://liveworkspace.org/code/30cqa2$15
0
Eugene_m
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 3
12.01.2013, 06:11 #5
можно вот так:

C++
1
2
3
4
5
6
AnsiString str;
float a,a1;
 
a=14.23788;
str = FormatFloat("0.000", a);
a1=str;
для первого варианта

Добавлено через 7 минут
точнее так=))

C++
1
2
3
4
5
6
AnsiString str;
float a,a1;
 
a=14.23788;
str = FormatFloat("0.000", a);
a1=StrToFloat(str);
подключаем vcl.h
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
12.01.2013, 08:45 #6
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
мне надо дать такое значение числам а1 и а2
Не факт что получится дать точно такое значение из-за особенностей представления вещественных чисел в памяти.
Цитата Сообщение от Eugene_m Посмотреть сообщение
подключаем vcl.h
Не все пишут на билдере.
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.01.2013, 09:53 #7
Цитата Сообщение от Croessmah Посмотреть сообщение
Не все пишут на билдере.
Говори правильно: "Никто не пишет на Билдере".

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
// 1.0 / Порядок, до которого требуется округлить число
float N = 1000.f;
 
float a = 123.456789.f;
 
// отсечение, без округления
float r1 = floor(a * N) / N; // r1 = 123.456
 
// округление
float r2 = floor(a*N + 0.5f) / N; // r2 = 123.457
2
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 21:26  [ТС] #8
Спасибо всем
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
12.01.2013, 21:52 #9
Присоединюсь к замечанию Croessmah о точности и от себя спрошу: зачем вообще понадобилось это делать? Для каких целей?
0
Avazart
Эксперт С++
7190 / 5364 / 280
Регистрация: 10.12.2010
Сообщений: 23,669
Записей в блоге: 17
12.01.2013, 23:02 #10
Читай http://www.cyberforum.ru/blogs/18334/blog88.html вопрос отпадет...
1
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 23:21  [ТС] #11
Цитата Сообщение от 0x10 Посмотреть сообщение
Присоединюсь к замечанию Croessmah о точности и от себя спрошу: зачем вообще понадобилось это делать? Для каких целей?
Я составлял программу для решения Системы нелинейных алгебраических уравнений методом простой итерации, и там мне нужно условие когда все 4 решения должны уточняться до тысячной, десяти тысячной и т.д. Поэтому хотел это узнать(а может вспомнить) и навсегда покончить с этой проблемой, а то слишком часто она возникает (по крайней мере у меня)
0
Avazart
Эксперт С++
7190 / 5364 / 280
Регистрация: 10.12.2010
Сообщений: 23,669
Записей в блоге: 17
12.01.2013, 23:25 #12
Читайте статью не ставьте глупых вопросов...
0
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 23:35  [ТС] #13
Цитата Сообщение от Avazart Посмотреть сообщение
Читайте статью не ставьте глупых вопросов...
Извините пожалуйста, а что уже спросить нельзя??? Тогда зачем форум нужен?
0
Avazart
Эксперт С++
7190 / 5364 / 280
Регистрация: 10.12.2010
Сообщений: 23,669
Записей в блоге: 17
12.01.2013, 23:37 #14
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
Заметьте мне надо чтобы значение чисел стало таким, а не просто показывалась тысячная доля.
А что тут мусолить нельзя сделать float точно таким как хочешь - все равно оно будет задано по своему в машине в какой то приближенной форме, а округлять его глупо...

Поэтому разумно только форматировать при выводе...
0
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 23:44  [ТС] #15
Avazart, Почему глупо??? Может передо мной такая задача стоит? У меня метод простой итерации и нужно округлять результаты решений системы.
p.s. а насчёт мусора, тогда весь форум получается в мусоре. Раз на то дело пошло отвечайте всем так: "Читайте книги по программированию" и т.д. и т.п.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 23:44
Привет! Вот еще темы с ответами:

Количество знаков после запятой - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { float g = 10.53446; printf(&quot;%.4f\n&quot;, g); ...

Вывести n знаков после запятой - C++
Всем привет, не знаю как через cout вывести 8 знаков после запятой. Заранее спасибо

Количество знаков после запятой - C++
После запятой нужно всешжа показывать определенные число знаков, например шесть: 263.000000 Иными словами, даже если там нули ...

Вывод n знаков после запятой - C++
Как это сделать?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.01.2013, 23:44
Ответ Создать тему
Опции темы

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