Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.031 c
2-1131692511
Oni
2005-11-11 10:01
2005.11.27
Что такое framework (терминералогический вопрос)?


14-1130828683
Keni
2005-11-01 10:04
2005.11.27
Создание проги для КПК


2-1131106411
12next
2005-11-04 15:13
2005.11.27
Заменить процедуру события OnClick


2-1131626075
Тормаз
2005-11-10 15:34
2005.11.27
Подскажите запрос


2-1131647329
dj0n
2005-11-10 21:28
2005.11.27
Отчеты для БД.




   Наверх