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

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

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

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

Увеличение числа знаков после запятой
Всем привет! не выходит увеличить число знаков после запятой, конкретно для...

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

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

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

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

32
Дмитрий 93
74 / 59 / 24
Регистрация: 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 / 11
Регистрация: 06.12.2012
Сообщений: 131
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
++Ͻ
14487 / 8268 / 1553
Регистрация: 27.09.2012
Сообщений: 20,312
Записей в блоге: 3
Завершенные тесты: 1
12.01.2013, 08:45 #6
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
мне надо дать такое значение числам а1 и а2
Не факт что получится дать точно такое значение из-за особенностей представления вещественных чисел в памяти.
Цитата Сообщение от Eugene_m Посмотреть сообщение
подключаем vcl.h
Не все пишут на билдере.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 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
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
12.01.2013, 21:52 #9
Присоединюсь к замечанию Croessmah о точности и от себя спрошу: зачем вообще понадобилось это делать? Для каких целей?
0
Avazart
Эксперт С++
7717 / 5626 / 549
Регистрация: 10.12.2010
Сообщений: 25,322
Записей в блоге: 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
Эксперт С++
7717 / 5626 / 549
Регистрация: 10.12.2010
Сообщений: 25,322
Записей в блоге: 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
Эксперт С++
7717 / 5626 / 549
Регистрация: 10.12.2010
Сообщений: 25,322
Записей в блоге: 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
Avazart
Эксперт С++
7717 / 5626 / 549
Регистрация: 10.12.2010
Сообщений: 25,322
Записей в блоге: 17
12.01.2013, 23:58 #16
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
Avazart, Почему глупо??? Может передо мной такая задача стоит? У меня метод простой итерации и нужно округлять результаты решений системы.
Вот и я говорю задача - глупая ... глупо терять точность...

Цитата Сообщение от PoMa_HaB Посмотреть сообщение
p.s. а насчёт мусора, тогда весь форум получается в мусоре. Раз на то дело пошло отвечайте всем так: "Читайте книги по программированию" и т.д. и т.п.
Я кинул конкретную статью для начинающих ( блог) при чем тут книги ?
0
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
13.01.2013, 00:06  [ТС] #17
Цитата Сообщение от Avazart Посмотреть сообщение
Вот и я говорю задача - глупая ... глупо терять точность...
Ну это вы скажите авторам книг по вычислительным методам...
0
Avazart
Эксперт С++
7717 / 5626 / 549
Регистрация: 10.12.2010
Сообщений: 25,322
Записей в блоге: 17
13.01.2013, 00:08 #18
Ну вот началось: " Я Дартаньян, писатели книг - 3.14..."

Более чем уверен что вам нужно не округление, а сравнение этих чисел с заданной точностью ...

Тобишь

C++
1
2
3
4
float a,b;
const float e= 10e-10;
//...
if ( fabs(a - b) < e ) { / * Ура это решение !!! */ };
1
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
13.01.2013, 00:42  [ТС] #19
Цитата Сообщение от Avazart Посмотреть сообщение
Ну вот началось: " Я Дартаньян, писатели книг - 3.14..."

Более чем уверен что вам нужно не округление, а сравнение этих чисел с заданной точностью ...

Тобишь

C++
1
2
3
4
float a,b;
const float e= 10e-10;
//...
if ( fabs(a - b) < e ) { / * Ура это решение !!! */ };
Этот принцип не работал у меня, а вот то что в этой теме мне очень даже помогло. И вуаля, программа работает и останавливается на нужной точности... Мне кажется можно закрыть эту тему и остановить дискуссию
0
Avazart
Эксперт С++
7717 / 5626 / 549
Регистрация: 10.12.2010
Сообщений: 25,322
Записей в блоге: 17
13.01.2013, 00:54 #20
Цитата Сообщение от Deviaphan Посмотреть сообщение
Говори правильно: "Никто не пишет на Билдере".
Не все умеют
0
13.01.2013, 00:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 00:54

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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