Смотря какое округление нужно. Допусим, из 4.5 что ты хочешь получить? 4 или 5? Есть арифметическое округление, округление в большую или меньшую сторону.
Автор: Bard 13.05.2007 16:04
Perfez, ты не совсем прав ведь по математически округление(4.5)=5 а round(4.5)=4 ... так что лучше при таких случаях просто написать round(4.5)+1 .... вот и все ....
Автор: 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
что за бред? trunc(4.5)=4, это не спорю.
Цитата
round(4.5)+1
а если у нас будет не 4.5, а 3.2? даже по твоей логике - это не будет математическим округлением.
Автор: Bard 15.05.2007 11:32
Volvo, ведь ты же говорил что ты никогда не ставишь не скомпилировав программу ... а вот теперь сделай одолжение напиши такую программу и прогони ...
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 если не веришь, проверь
Автор: 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...
Цитата
Ничего подобного... Я про то, что НЕ ВСЕГДА - до меньшего... Попробуй округлить 7.5 - тебя ждет сюрприз...
я все понял... спасибо
Автор: 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 только если она ненулевая.