Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
8-1096524938
Alex_s
2004-09-30 10:15
2004.12.26
Icon image not valid


14-1102154522
SteelMan
2004-12-04 13:02
2004.12.26
куда катится интернет?!


14-1102260093
Супермэн
2004-12-05 18:21
2004.12.26
Двойная мораль или отсутствие какой-либо морали?


4-1100189391
Dominus
2004-11-11 19:09
2004.12.26
Раскладка клавиатуры


9-1093004228
Megabyte-Ceercop
2004-08-20 16:17
2004.12.26
Игра растет в памяти после каждого ГеймОвера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский