![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильное округление числа [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;