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

Вниз

Округление до целого   Найти похожие ветки 

 
©   (2004-12-14 11:44) [0]

Подскажите, есть ли стандартный алгоритм(функция)
округляющая дробное число по такому принципу  до целого числа

1,4=1
1,45=2
1,447=2
1,443=1
т.е. если за округляемой цифрой стоит число в диапазоне [5..9] то к ней прибавляем 1,
если менее 5, то ничего ни прибавляем.

Еще для примера
число 1,4549

идем с конца 9 > 5, значит 4 округляем до 5
получается 1,455
далее 1,46
далее 1,5
и наконец 2


 
Семен Сорокин ©   (2004-12-14 11:53) [1]

Round(RoundTo(Value, -2))


 
Delphi5.01 ©   (2004-12-14 11:55) [2]

a chem prosto Round() plokh?


 
©   (2004-12-14 12:10) [3]

>Семен Сорокин ©  
RoundTo- в каком модуле эта функция

>Delphi5.01 ©
Round() - по правилу которое я описал не округляет


 
Семен Сорокин ©   (2004-12-14 12:14) [4]


> R ©   (14.12.04 12:10) [3]
> RoundTo- в каком модуле эта функция

sorry, это в Math (D7)

function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
var
 LFactor: Double;
begin
 LFactor := IntPower(10, ADigit);
 Result := Round(AValue / LFactor) * LFactor;
end;


 
DiamondShark ©   (2004-12-14 12:19) [5]

Нет, стандартного нет. Хотя бы по той причине, что машина ничего не знает о десятичных цафрах, а число 1,455, к примеру, в машинной форме вообще не представимо.


 
Delphi5.01 ©   (2004-12-14 12:25) [6]

Nu togda esli ia ne oshibaus mojno sdelat tak:
1) Poluchaem celuiu chast
2) poluchaem destichnuiu chast.
sravnivaem desatichnuiu chast s chislom 0,555555555555555. kolichestvo 5 zavisist ot vashei nujdi. Esli polshe to privavlaem k celoi chasti 1 esli net to ostavlaem bez izmeneni.
Kak polchit desatichnuiu chast ne pomnu vrode int i trunc.


 
©   (2004-12-14 12:49) [7]

>Семен Сорокин ©   (14.12.04 12:14) [4]
К сожалению не то.
procedure TForm1.Button1Click(Sender: TObject);
begin
 Text:=IntToStr(Round(RoundTo(StrToFloat(Edit1.Text), -2)))
end;

function TForm1.RoundTo(const AValue: Double; const ADigit: SmallInt{заменил}): Double;
var
LFactor: Double;
begin
LFactor := IntPower(10, ADigit);
Result := Round(AValue / LFactor) * LFactor;
end;

1,45 дает 1

>Delphi5.01 ©   (14.12.04 12:25) [6]
Не понятна вот эта часть-
sravnivaem desatichnuiu chast s chislom 0,555555555555555. kolichestvo 5 zavisist ot vashei nujdi

>DiamondShark ©   (14.12.04 12:19) [5]
Работать со строкой ?


 
Delphi5.01 ©   (2004-12-14 12:58) [8]

da blin, sravnenie idot s konca, beru svoi slova obratno.
Togda ostaiotsa odna vesh razbit ostatok na chisla i vruchnui. No doljen bit bolee logkoe reshenie. :-(


 
Warlock ©   (2004-12-14 12:58) [9]

я попробовал как написал Семен Сорокин ©   (14.12.04 12:14) [4]
TRoundToRange заменил на Integer, вызов
RoundTo(1.2455,-3) дает 1.246
RoundTo(1.2454,-3) дает 1.245


 
Verg ©   (2004-12-14 13:03) [10]


> R ©   (14.12.04 11:44)
> Подскажите, есть ли стандартный алгоритм(функция)
> округляющая дробное число по такому принципу  до целого
> числа
>
> 1,4=1
> 1,45=2
> 1,447=2
> 1,443=1


То, что ты таким образом описал округлением назвать нельзя.

Ты округляешь до целого, а значит ты должен взять первую цифру перед запятой, а далее


> если за округляемой цифрой стоит {число} цифра в диапазоне [5..9]
> то к ней (к округляемой) прибавляем 1,
> если менее 5, то ничего ни прибавляем.


и все...


 
Gloomer ©   (2004-12-14 15:37) [11]

Бредовая получается функция :-)
что-то типа

function RoundXXX(f:double):integer;
var s:string;
 z,i:integer;
begin
s:=FloatToStr(f);
z:=pos(",",s);//"," - разделитель дроб.части в системе
if z>0 then
 for i:=length(s) downto z+2 do
if (s[i]>="5") then s[i-1]:=char(byte(s[i-1])+1);
result:=Round(StrToFloat(s));
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
14-1101983506
Ega23
2004-12-02 13:31
2004.12.26
Сахарный диабет


14-1102042622
Думкин
2004-12-03 05:57
2004.12.26
С днем рождения! 3 декабря


1-1102521272
ali_t
2004-12-08 18:54
2004.12.26
как перевести PChar в string


1-1103096660
Balck_Fury
2004-12-15 10:44
2004.12.26
Как организовать обмен полями записи, через типизированный файл


9-1092958217
Shurik
2004-08-20 03:30
2004.12.26
Помогите с блиттингом DirectDraw