Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ округление числа

Автор: Гость 12.05.2007 22:19

Как мне правильно округлить число?

Автор: Perfez 12.05.2007 22:24

Round(x)? smile.gif

Автор: мисс_граффити 12.05.2007 22:28

Смотря какое округление нужно.
Допусим, из 4.5 что ты хочешь получить? 4 или 5?
Есть арифметическое округление, округление в большую или меньшую сторону.

Автор: Bard 13.05.2007 16:04

Perfez, ты не совсем прав no1.gif ведь по математически округление(4.5)=5 а round(4.5)=4 yes2.gif ...
так что лучше при таких случаях просто написать round(4.5)+1 nea.gif .... вот и все wink.gif ....

Автор: volvo 13.05.2007 16:11

Цитата
а round(4.5)=4
Да? С каких это пор?

Цитата(TP Help)

Round (function)

Rounds a Real-type value to an Integer-type value.
Declaration:
function Round(X: Real): Longint;

Remarks:
X is a real-type expression. Round returns a Longint value that is the value of X rounded to the nearest whole number. If X is exactly halfway between two whole numbers, the result is the number with the greatest absolute magnitude. A run-time error occurs if the rounded value of X is not within the Longint range.


Автор: мисс_граффити 13.05.2007 17:44

blink.gif что за бред? trunc(4.5)=4, это не спорю.

Цитата
round(4.5)+1

а если у нас будет не 4.5, а 3.2? даже по твоей логике - это не будет математическим округлением.

Автор: Bard 15.05.2007 11:32

Volvo, ведь ты же говорил что ты никогда не ставишь не скомпилировав программу mad.gif ... а вот теперь сделай одолжение напиши такую программу и прогони norespect.gif ...


var
a:real;
begin
a:=4.5;
writeln(round(a)); { ... или же просто writeln(4.5); }
end.


мисс_граффити, я же не сказал что round(3.2) не равно 3 и даже round(4.6) равно 5, но round(4.5) равно 4
если не веришь, проверь yes2.gif

Автор: Lapp 15.05.2007 12:58

Хм.. Действительно, FPC мне округлил половину до меньшего числа..
BP сработал правильно.

Автор: volvo 15.05.2007 13:21

Bard,
Прикрепленное изображение
Еще вопросы есть?

А теперь ТЫ мне сделай одолжение: посмотри на название раздела, и прогони программу на СООТВЕТСТВУЮЩЕМ компиляторе! (и не забудь учесть, что НЕ У ВСЕХ сопроцессор по умолчанию включен, его ж еще надо подключить !!!) Так что, делай выводы...

А на FPC тестировать будешь программы для раздела "32-битные компиляторы"...

P.S.

Цитата(Lapp)
Хм.. Действительно, FPC мне округлил половину до меньшего числа..
Ничего подобного... Я про то, что НЕ ВСЕГДА - до меньшего... Попробуй округлить 7.5 - тебя ждет сюрприз...

Цитата(RTL.pdf)
29.9.451 round
Synopsis: Round floating point value to nearest integer number.
Declaration: function round(d: ValReal) : Int64
Visibility: default
Description: Round rounds X to the closest integer, which may be bigger or smaller than X. In the case of .5, the algorithm uses "banker’s rounding": .5 values are always rounded towards the even number.
Errors: None.

Автор: Bard 15.05.2007 14:41

Цитата

Хм.. Действительно, FPC мне округлил половину до меньшего числа..
BP сработал правильно.

ну вот и я об этом... а так конечно же я знаю что при округлении 4.5 ответ должен быть 5... dry.gif

Цитата

Ничего подобного... Я про то, что НЕ ВСЕГДА - до меньшего... Попробуй округлить 7.5 - тебя ждет сюрприз...

я все понял... спасибо good.gif

Автор: TIGER535 5.12.2010 2:31

а есть еще вопросик, как округлить число в большую/меньшую сторону независимо от дробной части
т.е. например в большую
3,2 = 4
3,8 = 4
3,1 = 4

Автор: volvo 5.12.2010 2:44

Цитата
как округлить число в большую/меньшую сторону независимо от дробной части
Отбросить дробную часть (Trunc-ом) и прибавить 1 к результату. Можно проверить дробную часть, и прибавлять 1 только если она ненулевая.

Автор: Гость 5.12.2010 2:48

спасибо, а как проверить?

Автор: Кулер 18.06.2018 12:25

Цитата(volvo @ 5.12.2010 2:44) *

Цитата
как округлить число в большую/меньшую сторону независимо от дробной части
Отбросить дробную часть (Trunc-ом) и прибавить 1 к результату. Можно проверить дробную часть, и прибавлять 1 только если она ненулевая.


round(x+0,4(9)) - спартанское решение