Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизОкругление до целого Найти похожие ветки
← →
R © (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?
← →
R © (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.
← →
R © (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c