OberonCore
https://forum.oberoncore.ru/

Об округлении
https://forum.oberoncore.ru/viewtopic.php?f=23&t=109
Страница 1 из 1

Автор:  sacred [ Воскресенье, 05 Февраль, 2006 20:40 ]
Заголовок сообщения:  Об округлении

Есть числа вида 123.700000000000001, 117.49999999999999999 и т. д. Эти числа такие, какие есть, их источник поменять не удастся.
На самом деле это всё ошибки округления. Вопрос: как их правильно округлить? Что-то не могу придумать. Правильно - то есть до 2-х знаков после запятой. Округлить их нужно для вывода на экран/принтер. Понятно, что для вычислений в округлении необходимости нет. Хотя я тут подумал - и для вычислений (точнее сравнений) необходимость есть.

Автор:  Trurl [ Понедельник, 06 Февраль, 2006 12:08 ]
Заголовок сообщения: 

Код:
a:= Math.Round(a*100)/100;

Автор:  sacred [ Понедельник, 06 Февраль, 2006 14:26 ]
Заголовок сообщения: 

Trurl писал(а):
Код:
a:= Math.Round(a*100)/100;

Фиг вам, извиняюсь за выражение.
Я уже так пробовал. Независимо от величины делителя/множителя, находятся числа, которые таким образом не округляются... То есть они, конечно округляются при операции Math.Round(a*k), а вот потом при делении на k происходит опять ошибка и появляется длинный хвост нулей и девяток. На вскидку у меня примерно 20% таких чисел.

Автор:  Сергей Губанов [ Понедельник, 06 Февраль, 2006 14:42 ]
Заголовок сообщения: 

Ну, преобразуйте Math.Round(a*100) в целое число n. Затем целую и дробную части исходного числа получите с помощью
x := n DIV 100;
y := n MOD 100;
Потом распечатайте x и y через точку... :D

Автор:  sacred [ Понедельник, 06 Февраль, 2006 14:54 ]
Заголовок сообщения: 

Сергей Губанов писал(а):
Ну, преобразуйте Math.Round(a*100) в целое число n. Затем целую и дробную части исходного числа получите с помощью
x := n DIV 100;
y := n MOD 100;
Потом распечатайте x и y через точку... :D

Уууу!!! Ну я тормоз! Это от лени, наверное. Уже приготовился использовать Strings.RealToString, и плясал от этого. Кстати, а в BlackBox'е нет ли стандартных средств для работы с Currency?

Автор:  starant [ Суббота, 13 Май, 2006 11:32 ]
Заголовок сообщения: 

Привожу выписку из моего конспекта по курсу "Метрология":
Правила округления результата измерения:
1) Числовой результат измерения должен содержать столько значащих разрядов, сколько имеет погрешность результата измерения.
Погрешность результата измерения оценивается максимум 2-мя значащими цифрами, а чаще 1-ой. Если в значении погрешности старший разряд имеет
значение 4 или меньше, то оставляют 2 значащие цифры, остальные отбрасывают.

2) Если при округлении первая из отбрасываемых цифр меньше 5, то оставляемые цифры не изменяются, если - больше 5, то
младшая из оставляемых цифр увеличивается на 1, если отбрасываемая цифра является 5 , то оставляемая увеличивается на 1 если она была
нечетная и остается без изменений если была четная (правило устойчивости четных разрядов).

Пример:
0,37 \ 586915 -> 0.38
0,46 \ 1254 -> 0,46
0,5 \ 12965 -> 0,5
0,5 \ 53421 -> 0,6
0,5 \ 5032 -> 0,6
0,6 \ 5473 -> 0,6
0,003925 -> 0,004

Автор:  Илья Ермаков [ Суббота, 13 Май, 2006 11:59 ]
Заголовок сообщения: 

Вы просто для информации, или намекаете, что в ББ округление как-то не так происходит? :-)

Автор:  starant [ Суббота, 13 Май, 2006 12:37 ]
Заголовок сообщения: 

Илья Ермаков писал(а):
Вы просто для информации, или намекаете, что в ББ округление как-то не так происходит? :-)

Конечно для информации!!! :D
Ведь на форум заходят разные люди, может кому-то и понадобятся эти правила. :lol:
Ведь если посмотреть на эти правила, то выходит, что "метрологи" округляют иначе чем "математики". :!:

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/