Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/76: Рейтинг темы: голосов - 76, средняя оценка - 4.66
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
1

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

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

Author24 — интернет-сервис помощи студентам
Вот например у меня массив с числами, у которых по 5 знаков после запятой. Как мне (с помощью какой функции или операции) сделать так чтобы у этих чисел, было по 3 знака после запятой двумя способами (сначала округлялось, а вторым способом не округлялось до тысячной. Заметьте мне надо чтобы значение чисел стало таким, а не просто показывалась тысячная доля. Например такие функции как cout.precision и printf мне не помогут.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2013, 21:54
Ответы с готовыми решениями:

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

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

Число знаков после запятой для числа е
Прошу подсказки, только начал изучение, использую DEV-C++ 5.11 После запятой выводит не более 5...

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

32
75 / 60 / 24
Регистрация: 03.06.2011
Сообщений: 309
11.01.2013, 22:32 2
setprecision, setw, не?
0
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
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
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
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
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
12.01.2013, 08:45 6
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
мне надо дать такое значение числам а1 и а2
Не факт что получится дать точно такое значение из-за особенностей представления вещественных чисел в памяти.
Цитата Сообщение от Eugene_m Посмотреть сообщение
подключаем vcl.h
Не все пишут на билдере.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 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
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
12.01.2013, 21:26  [ТС] 8
Спасибо всем
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
12.01.2013, 21:52 9
Присоединюсь к замечанию Croessmah о точности и от себя спрошу: зачем вообще понадобилось это делать? Для каких целей?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 23:02 10
Читай https://www.cyberforum.ru/blogs/18334/blog88.html вопрос отпадет...
1
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
12.01.2013, 23:21  [ТС] 11
Цитата Сообщение от 0x10 Посмотреть сообщение
Присоединюсь к замечанию Croessmah о точности и от себя спрошу: зачем вообще понадобилось это делать? Для каких целей?
Я составлял программу для решения Системы нелинейных алгебраических уравнений методом простой итерации, и там мне нужно условие когда все 4 решения должны уточняться до тысячной, десяти тысячной и т.д. Поэтому хотел это узнать(а может вспомнить) и навсегда покончить с этой проблемой, а то слишком часто она возникает (по крайней мере у меня)
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 23:25 12
Читайте статью не ставьте глупых вопросов...
0
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
12.01.2013, 23:35  [ТС] 13
Цитата Сообщение от Avazart Посмотреть сообщение
Читайте статью не ставьте глупых вопросов...
Извините пожалуйста, а что уже спросить нельзя??? Тогда зачем форум нужен?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 23:37 14
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
Заметьте мне надо чтобы значение чисел стало таким, а не просто показывалась тысячная доля.
А что тут мусолить нельзя сделать float точно таким как хочешь - все равно оно будет задано по своему в машине в какой то приближенной форме, а округлять его глупо...

Поэтому разумно только форматировать при выводе...
0
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
12.01.2013, 23:44  [ТС] 15
Avazart, Почему глупо??? Может передо мной такая задача стоит? У меня метод простой итерации и нужно округлять результаты решений системы.
p.s. а насчёт мусора, тогда весь форум получается в мусоре. Раз на то дело пошло отвечайте всем так: "Читайте книги по программированию" и т.д. и т.п.
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 23:58 16
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
Avazart, Почему глупо??? Может передо мной такая задача стоит? У меня метод простой итерации и нужно округлять результаты решений системы.
Вот и я говорю задача - глупая ... глупо терять точность...

Цитата Сообщение от PoMa_HaB Посмотреть сообщение
p.s. а насчёт мусора, тогда весь форум получается в мусоре. Раз на то дело пошло отвечайте всем так: "Читайте книги по программированию" и т.д. и т.п.
Я кинул конкретную статью для начинающих ( блог) при чем тут книги ?
0
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
13.01.2013, 00:06  [ТС] 17
Цитата Сообщение от Avazart Посмотреть сообщение
Вот и я говорю задача - глупая ... глупо терять точность...
Ну это вы скажите авторам книг по вычислительным методам...
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
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
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
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
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.01.2013, 00:54 20
Цитата Сообщение от Deviaphan Посмотреть сообщение
Говори правильно: "Никто не пишет на Билдере".
Не все умеют
0
13.01.2013, 00:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2013, 00:54
Помогаю со студенческими работами здесь

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

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

Вывод большого числа знаков после запятой в текстовый файл
Всем привет! Нужно что бы в текстовый файл записывалось 48 знаков после запятой, а записывает...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru