С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641

Округление числа в C++Builder

18.09.2013, 11:01. Показов 6341. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется математический простенький расчет.
В нем надо округлить результат расчета до 2-х знаков после запятой.

код расчета и вывод в поле memo формы такой:

C++
1
2
3
numC = pow(numA, numB);
 
C->Text=FloatToStr(numC);

Подскажите пожалуйста как это реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2013, 11:01
Ответы с готовыми решениями:

Округление числа в C++ Builder
Задача довольно проста, округлить число float на определенное число знаков, в моем случае до 3х знаков после запятой (точки). Полазив по...

округление в C++ Builder 6
//--------------------------------------------------------------------------- #include <vcl.h> #include<math.h> ...

Округление числа
Всем привет! Такой вопрос. На SQL Сервере есть запрос с округлением select столбец1, 10*round(столбец1 / 10, 0) as столбец2 from...

16
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
18.09.2013, 11:12
Memo вывод значений с точностью до 3 знаков после запятой
0
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
18.09.2013, 11:31  [ТС]
Добавлено через 10 минут
SatanaXIII, я эту тему уже смотрел. это не то. там в ответе вывод в label а мне надо вывод в мемо. прошу вернуть тему на место
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,853
18.09.2013, 11:35
вот самое простейшее округление
математическое, все что больше или равно 0.5 добавляет 1
пишу по шагам можно сократить
C++
1
2
3
4
float f1=1.2345678;
float f2=f1*100+0.5;
int i1=f2;
f1=(float)i1/100.0;
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.09.2013, 11:45
C++
1
2
sprintf(buf, "%.2f",numC);
C->Text=buf;
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
18.09.2013, 11:50
Цитата Сообщение от coder8763 Посмотреть сообщение
там в ответе вывод в label а мне надо вывод в мемо
Аааа. Извините. Не заметил.

Вот в Memo:
C++
1
2
3
numC = pow(numA, numB);
 
C->Text=FormatFloat("0.000", numC);
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,853
18.09.2013, 11:51
Байт,
по моему это просто отбросит значение, не округляя
0
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
18.09.2013, 11:57  [ТС]
SatanaXIII, все гениальное просто как оказалось! большое спасибо! все отлично работает!
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.09.2013, 11:57
Цитата Сообщение от ValeryS Посмотреть сообщение
Байт,
по моему это просто отбросит значение, не округляя
Нет, именно округлит. Попробуйте.
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,853
18.09.2013, 11:58
Цитата Сообщение от Байт Посмотреть сообщение
Нет, именно округлит. Попробуйте.
ладно попробую, как до компьютера доберусь
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.09.2013, 12:01
Цитата Сообщение от ValeryS Посмотреть сообщение
Байт,
по моему это просто отбросит значение, не округляя
Твой вариант из поста #4 тоже не округлит (как это предполагается в привычной нам десятичной системе счисления). Да и большинство плавающих чисел в десятичной системе невозможно округлить, т.к. их двоичное представление всё равно будет неточным. Единственная возможность сделать вид, что произошло округление - это округлить печать числа (но не настоящее значение). В культурных интерфейсах печати округление происходит как округление (а не просто отбрасывание лишних цифр)
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,853
18.09.2013, 12:17
Цитата Сообщение от Evg Посмотреть сообщение
вой вариант из поста #4 тоже не округлит (как это предполагается в привычной нам десятичной системе счисления).
фиг вам округлит
этой мульке уже много лет(лет 40 точно)
Цитата Сообщение от Evg Посмотреть сообщение
Да и большинство плавающих чисел в десятичной системе невозможно округлить, т.к. их двоичное представление всё равно будет неточным.
ну я как бы в курсе
так и не все дроби можно перевести в десятичную дробь
приходится мирится с потерей точности и не только с компьютерами
Цитата Сообщение от Evg Посмотреть сообщение
Единственная возможность сделать вид, что произошло округление - это округлить печать числа (но не настоящее значение).
иногда и в расчетах нужно округлять
например дан диаметр в метрах, зачем длинна окружности с точностью до миллиметра?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.09.2013, 12:26
Цитата Сообщение от ValeryS Посмотреть сообщение
фиг вам округлит
Да ну?

C
#include <stdio.h>
 
int main (void)
{
  float f1=1.2345678;
  float f2=f1*100+0.5;
  int i1=f2;
  f1=(float)i1/100.0;
  printf ("%.10f\n", f1);
  return 0;
}
Code
1
2
3
$ gcc t.c
$ ./a.out
1.2300000191
Цитата Сообщение от ValeryS Посмотреть сообщение
иногда и в расчетах нужно округлять
Зачем? Процессору абсолютно плевать, округлёнными значениями он оперирует, или нет (тем более, что в двоичном виде всё равно ничего округлённого не будет). Округлять нужно только вывод (печать) результата, поскольку на него будет смотреть человек. Ни в каком другом месте реально округление не нужно
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,853
18.09.2013, 14:35
Байт,
действительно округляется будем знать
Цитата Сообщение от Evg Посмотреть сообщение
Да ну?
ну да
просто выводить нужно с точностью по умолчанию
Цитата Сообщение от Evg Посмотреть сообщение
Зачем? Процессору абсолютно плевать, округлёнными значениями он оперирует, или нет (тем более, что в двоичном виде всё равно ничего округлённого не будет). Округлять нужно только вывод (печать) результата, поскольку на него будет смотреть человек.
есть такая штука как накопление ошибок
ладно практика критерий истины

вот код(я в него сразу все загнал)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <windows.h>
int  main()
{
float f1=1.236567;
float f2=f1*100+0.5;
int i1=f2;
f2=i1/100.0;
printf("float \n");
 
printf("f1=%.2f \n",f1);
printf("f2(f) =%f \n",f2);
printf("f2(f.10)=%.10f \n",f2);
 
float f3=0.001;
float f4=0,f5=0,f6=0;
for(int i=0;i<1000000;i++)
{
 f4+=f3; 
}
for(int i=0;i<1000000;i++)
{
 f5+=f3; 
 f6=f5*1000+0.5;
 i1=f6;
 f5=i1/1000.0;
 
}
 
printf("f4=%f \n",f4);
printf("f5=%f \n",f5);
printf(" \n=====================\n");
printf("double \n");
double d1=1.236567;
double d2=d1*100+0.5;
int i2=d2;
d2=i2/100.0;
 
printf("d1=%.2f \n",d1);
printf("d2(f)=%f \n",d2);
printf("d2(f.10)=%.010f \n",d2);
double d3=0.001;
double d4=0,d5=0,d6=0;
for(int i=0;i<1000000;i++)
{
 d4+=d3; 
}
for(int i=0;i<1000000;i++)
{
 d5+=d3; 
 d6=d5*1000+0.5;
 i2=d6;
 d5=i1/1000.0;
 
}
 
printf("d4=%f \n",d4);
printf("d5=%f \n",d5);
 
system("pause");
 }
дубли ведут себя как будто никаких ошибок нет, ну это просто ошибки у них меньше
обрати внимание на вывод f2 с заданной точностью и точностью по умолчанию

теперь на два цикла с округлением и без
видишь как набежала ошибка по тому что 0.001 не точно представлен
а округление её нивелирует

VisualStudio 2008 если что.
причем результат одинаков и Дебиге и в Релизе с самой крутой оптимизацией
я думал что оптимизатор заменит вот это
C++
1
2
3
4
for(int i=0;i<1000000;i++)
{
 f4+=f3; 
}
на умножение или сразу рассчитает
нифига
Миниатюры
Округление числа в C++Builder  
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.09.2013, 16:38
Цитата Сообщение от ValeryS Посмотреть сообщение
просто выводить нужно с точностью по умолчанию
Т.е. округление есть или всё-таки нету? Я считаю, что нету. Неполноценное округление от его отсутсвие принципиально ничем не отличается.

Цитата Сообщение от ValeryS Посмотреть сообщение
есть такая штука как накопление ошибок
Давай-ка ты не путай свойства разных типов float и double по разному накапливать ошибки. Это фундаментальное свойство внутреннего представления, которое вытекает из неточности этого самого представления. К термину "округление" в том понятии, о котором говорил ТС, это никакого отношения не имеет. Тут "округление" - это часть алгоритма, призванная компенсировать фундаментальные неточности вычислений, в то время как у ТС'а "округление" - это свойство для более удобного восприятия человеком плавающей величины

Добавлено через 6 минут
В итоге получается, что мы просто в разных смыслах используем термин "округление". Ты - в своём смысле, я - в том смысле, что подразумевал ТС
1
18.09.2013, 17:29

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
В итоге получается, что мы просто в разных смыслах используем термин "округление". Ты - в своём смысле, я - в том смысле, что подразумевал ТС
Ну вот и договорились:)
видишь ли я не чистый программист, я еще и инженер-электронщик, и видать эта смесь дает то, что я иногда понимаю по своему

2
Evg
18.09.2013, 18:46

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
видишь ли я не чистый программист, я еще и инженер-электронщик, и видать эта смесь дает то, что я иногда понимаю по своему
Это нормальное явление. Главное, что мы поняли друг друга и чтобы остальные понимали правильно

2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.09.2013, 18:46
Помогаю со студенческими работами здесь

Округление числа до целого
Добрый день! Может кто сталкивался с подобным. На форуме по искал ни чего похожего не нашел (может так искал). В поле ввода я...

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

Округление числа
Кто-нибудь может подробно-подробно объяснить, как округлять числа в C++. А то я то, что причитал, ничего не понял. Вот у меня...

Округление числа
Не пойму, почему компилятор пишет Выражение должно иметь целочисленный или перечисляемый тип. Код для округления числа float...

Округление мелкого числа до 0
Всем привет, времени мало поэтому пишу сюда суть такова - нужно сделать перемножение матриц 3х3 типа double потом вывести на экран ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru