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 через точку... ![]() |
Автор: | sacred [ Понедельник, 06 Февраль, 2006 14:54 ] |
Заголовок сообщения: | |
Сергей Губанов писал(а): Ну, преобразуйте Math.Round(a*100) в целое число n. Затем целую и дробную части исходного числа получите с помощью
x := n DIV 100; y := n MOD 100; Потом распечатайте x и y через точку... ![]() Уууу!!! Ну я тормоз! Это от лени, наверное. Уже приготовился использовать 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 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): Вы просто для информации, или намекаете, что в ББ округление как-то не так происходит?
![]() Конечно для информации!!! ![]() Ведь на форум заходят разные люди, может кому-то и понадобятся эти правила. ![]() Ведь если посмотреть на эти правила, то выходит, что "метрологи" округляют иначе чем "математики". ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |