Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильное округление числа [D6, Win2k, WinXP]


serg128 ©   (2005-11-02 19:24:00) 

Суть такова:
 есть число с плавающей точкой,

var
r : real;
begin
...
r := 3.1415285;
...


Как его округлить до 2х знаков после запятой, т.е. если третий разряд больше 6, то второй разряд соотв на 1 больше, и ссотв. наоборот, если третий разряд меньше 5,то второй разряд остаётся без изменений (как в школьной математике)?


Max Zyuzin   (2005-11-07 16:19:00) [1]

>Sergey_Masloff   (07.11.05 14:03) [14]
Тем не менее Max Zyuzin ©   (07.11.05 10:37) [9]  есть какие нить соображения?


Sergey_Masloff   (2005-11-07 14:03:00) [2]

SergP.   (07.11.05 13:14) [13]
>Оказывается бывает еще и Школьное округление...
Представь себе, это довольно устоявшийся термин. Причем даже забугорные товарищи понимают о чем речь.


SergP.   (2005-11-07 13:14:00) [3]


> SimpleRoundTo() - Школьное


Оказывается бывает еще и Школьноеокругление...


begin...end   (2005-11-07 11:05:00) [4]

> DELORAC ©   (07.11.05 10:56) [10]

In Delphi, the Round function rounds a real-type value to an integer-type value.

X is a real-type expression. Round returns an Int64 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 always the evennumber. This method of rounding is often called "Banker’s Rounding".


Max Zyuzin   (2005-11-07 11:05:00) [5]

>DELORAC ©   (07.11.05 10:56) [10]
Это как раз все правильно значит, читай хелп... "банковское округление"


DELORAC   (2005-11-07 10:56:00) [6]

Забавно, что Round(1.5) возвращает 2, а Round(10,5) возвращает 10, что бы это могло значить?


Max Zyuzin   (2005-11-07 10:37:00) [7]

>Sergey Masloff   (02.11.05 20:03) [4]
Сегодня столкнулся с "забавной" штукой...
Функция Round(554098.5) возвращает 554098 Что ечть правильно.... а
Функция SimpleRoundTo(5540.985,-2); возвращает 5540.98 что есть интересно, с учетом того что написано про нее в хелпе...


DELORAC   (2005-11-03 09:52:00) [8]

> Anatoly Podgoretsky
Обнуляться... :-)

> serg128
Вообще то по правилам школьной математики, если следующий после округляемого разряд >=5, то округляем в большую сторону, иначе в меньшую...

1.235, 1.236, ..., 1.239 --> 1.24
1.230, 1.231, ..., 1.234 --> 1.23


Anatoly Podgoretsky   (2005-11-02 21:32:00) [9]

А что должно делаться если равно 5 или 6?


wp2   (2005-11-02 20:25:00) [10]

r := Round(r*100)/100;


Baltika-34   (2005-11-02 20:07:00) [11]

Sergey Masloff   (02.11.05 20:03) [4]
Sergey Masloff


Ну, как говорится - век живи, век учись.

В D5 вроде  не было этой функции.


Sergey Masloff   (2005-11-02 20:03:00) [12]

Учите матчасть господа
RoundTo() - Банковское округление
SimpleRoundTo() - Школьное


Baltika-34   (2005-11-02 19:43:00) [13]

function MyRound(X:Double; N: Integer): Double;
var
 i,n1: Integer;
begin
 Result := X;
 n1 := 1;
 for i := 1 to N do n1 := n1*10;
 result := Trunc(Result*n1+0.5)/n1;
end;


Fay   (2005-11-02 19:29:00) [14]

2 serg128   (02.11.05 19:24)
А если третий разряд in [5, 6]?


Erl   (2005-11-02 19:28:00) [15]

Держи:
function RoundFloatPoint(R: Extended; Decimals: Integer): Extended;
var
 Factor: Extended;
begin
 Factor := Int(Exp(Decimals * Ln(10)));
 Result := Round(Factor * R) / Factor;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо