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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
11.01.2013, 21:54     Насчёт числа знаков после запятой #1
Вот например у меня массив с числами, у которых по 5 знаков после запятой. Как мне (с помощью какой функции или операции) сделать так чтобы у этих чисел, было по 3 знака после запятой двумя способами (сначала округлялось, а вторым способом не округлялось до тысячной. Заметьте мне надо чтобы значение чисел стало таким, а не просто показывалась тысячная доля. Например такие функции как cout.precision и printf мне не помогут.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
11.01.2013, 22:32     Насчёт числа знаков после запятой #2
setprecision, setw, не?
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
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
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
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
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
12.01.2013, 08:45     Насчёт числа знаков после запятой #6
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
мне надо дать такое значение числам а1 и а2
Не факт что получится дать точно такое значение из-за особенностей представления вещественных чисел в памяти.
Цитата Сообщение от Eugene_m Посмотреть сообщение
подключаем vcl.h
Не все пишут на билдере.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 21:26  [ТС]     Насчёт числа знаков после запятой #8
Спасибо всем
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
12.01.2013, 21:52     Насчёт числа знаков после запятой #9
Присоединюсь к замечанию Croessmah о точности и от себя спрошу: зачем вообще понадобилось это делать? Для каких целей?
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
12.01.2013, 23:02     Насчёт числа знаков после запятой #10
Читай http://www.cyberforum.ru/blogs/18334/blog88.html вопрос отпадет...
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 23:21  [ТС]     Насчёт числа знаков после запятой #11
Цитата Сообщение от 0x10 Посмотреть сообщение
Присоединюсь к замечанию Croessmah о точности и от себя спрошу: зачем вообще понадобилось это делать? Для каких целей?
Я составлял программу для решения Системы нелинейных алгебраических уравнений методом простой итерации, и там мне нужно условие когда все 4 решения должны уточняться до тысячной, десяти тысячной и т.д. Поэтому хотел это узнать(а может вспомнить) и навсегда покончить с этой проблемой, а то слишком часто она возникает (по крайней мере у меня)
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
12.01.2013, 23:25     Насчёт числа знаков после запятой #12
Читайте статью не ставьте глупых вопросов...
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 23:35  [ТС]     Насчёт числа знаков после запятой #13
Цитата Сообщение от Avazart Посмотреть сообщение
Читайте статью не ставьте глупых вопросов...
Извините пожалуйста, а что уже спросить нельзя??? Тогда зачем форум нужен?
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
12.01.2013, 23:37     Насчёт числа знаков после запятой #14
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
Заметьте мне надо чтобы значение чисел стало таким, а не просто показывалась тысячная доля.
А что тут мусолить нельзя сделать float точно таким как хочешь - все равно оно будет задано по своему в машине в какой то приближенной форме, а округлять его глупо...

Поэтому разумно только форматировать при выводе...
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
12.01.2013, 23:44  [ТС]     Насчёт числа знаков после запятой #15
Avazart, Почему глупо??? Может передо мной такая задача стоит? У меня метод простой итерации и нужно округлять результаты решений системы.
p.s. а насчёт мусора, тогда весь форум получается в мусоре. Раз на то дело пошло отвечайте всем так: "Читайте книги по программированию" и т.д. и т.п.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
12.01.2013, 23:58     Насчёт числа знаков после запятой #16
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
Avazart, Почему глупо??? Может передо мной такая задача стоит? У меня метод простой итерации и нужно округлять результаты решений системы.
Вот и я говорю задача - глупая ... глупо терять точность...

Цитата Сообщение от PoMa_HaB Посмотреть сообщение
p.s. а насчёт мусора, тогда весь форум получается в мусоре. Раз на то дело пошло отвечайте всем так: "Читайте книги по программированию" и т.д. и т.п.
Я кинул конкретную статью для начинающих ( блог) при чем тут книги ?
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
13.01.2013, 00:06  [ТС]     Насчёт числа знаков после запятой #17
Цитата Сообщение от Avazart Посмотреть сообщение
Вот и я говорю задача - глупая ... глупо терять точность...
Ну это вы скажите авторам книг по вычислительным методам...
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 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 ) { / * Ура это решение !!! */ };
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 ) { / * Ура это решение !!! */ };
Этот принцип не работал у меня, а вот то что в этой теме мне очень даже помогло. И вуаля, программа работает и останавливается на нужной точности... Мне кажется можно закрыть эту тему и остановить дискуссию
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 00:54     Насчёт числа знаков после запятой
Еще ссылки по теме:

Точность в N знаков после запятой числа типа double C++
Как вывести double до 2 знаков после запятой? C++
Максимальное количество знаков после запятой C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
13.01.2013, 00:54     Насчёт числа знаков после запятой #20
Цитата Сообщение от Deviaphan Посмотреть сообщение
Говори правильно: "Никто не пишет на Билдере".
Не все умеют
Yandex
Объявления
13.01.2013, 00:54     Насчёт числа знаков после запятой
Ответ Создать тему
Опции темы

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