Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Правильное округление числа   Найти похожие ветки 

 
serg128   (2005-11-02 19:24) [0]

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

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


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


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

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


 
Fay ©   (2005-11-02 19:29) [2]

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


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

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;


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

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


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

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


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

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


 
wp2 ©   (2005-11-02 20:25) [6]

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


 
Anatoly Podgoretsky ©   (2005-11-02 21:32) [7]

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


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

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

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

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


 
Max Zyuzin ©   (2005-11-07 10:37) [9]

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


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

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


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

> 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 even number. This method of rounding is often called "Banker’s Rounding".


 
Max Zyuzin ©   (2005-11-07 11:05) [12]

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


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


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


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


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

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


 
Max Zyuzin ©   (2005-11-07 16:19) [15]

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



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
14-1130944856
-[ HAWK ]-
2005-11-02 18:20
2005.11.27
Использование скинов


2-1131107194
syte_ser78
2005-11-04 15:26
2005.11.27
сетевой доступ к баз Paradox7


2-1131628594
markers
2005-11-10 16:16
2005.11.27
Выполнить консольную команду и вернуть результат?


14-1131343920
Sergey_Masloff
2005-11-07 09:12
2005.11.27
Думкин, happy birthday


8-1120212131
Radgar
2005-07-01 14:02
2005.11.27
Палитра