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

Вниз

Округление чисел типа real   Найти похожие ветки 

 
highlander   (2004-03-25 15:46) [0]

Вопрос! Нужно округлить число типа real, которое ранее в программе было расчитано. Но округление должно быть таким:
например, число 456.32 должно быть округлено до 456.35, а число 456,38 округлено до 456,40. Каким методом можно это сделать? Пробовал функцию frac, после чего превращал полученное лицо в строку и пытался работать со строкой, но не смог совместить типы переменных. А может подскажете как заменить в строке символ с заданным индексом на нужный?


 
TransparentGhost   (2004-03-25 15:48) [1]

If R>Trunc(R) then
  R:=Trunc(R)+1
Else
  {chislo bez hvosta}


 
TransparentGhost   (2004-03-25 15:50) [2]

Blin...stupil
jesli uspeju - napishu pravil"no :o)


 
TransparentGhost   (2004-03-25 15:52) [3]

zamena simvola v stroke :
s[i]:="z";


 
highlander   (2004-03-25 15:59) [4]

То TransparentGhost>
Да мы это знаем, но как это привязать к данной задаче?

   var z1,z2,z3,cena,nac,suma,vart:real;
   A1,vidp,vid:string[5];
   A,B:array[1..5] of string;
   i,kilk:integer;
begin
   vart:=(cena+cena*nac/100);
   z1:=int(vart);
   z2:=frac(vart);
   str(z2:3:5,A1);
   A[i]:=a1;
   case A[4] of {а здесь вот Error(75): Ordinal type required}
       "1","2","3","4":A[4]:="5";
       "6","7","8","9":A[4]:="0";
                       A[3]:=A[3]+1;
   end;
   z2:=strtofloat(A[i]);
   vart:=z1+z2;

Где я ошибся?


 
Ega23 ©   (2004-03-25 16:01) [5]

function _Round(const R:real):real;
begin
if Round(R*10)=Trunc(R*10) then Result:=(Trunc(R*10)/10)+0.5
else result:=Round(R*10)/10;
end;

Вроде так, не проверял. Только вопрос: куда округлять, если твоё число 456.50?


 
highlander   (2004-03-25 16:01) [6]

Промахнулся я чуть-чуть, не
A[3]:=A[3]+1;
 
а A[3]:=chr(A[3])+1;
 


 
highlander   (2004-03-25 16:05) [7]

To> Ega23 ©
А в таком случае число вообще не округлять! Мало того, когда число равно 456.55, тогда его тоже не округлять.


 
Ega23 ©   (2004-03-25 16:15) [8]

Ну, ты уж все условия распиши, а то: "Здесь играть, а здесь - не играть!"


 
TransparentGhost   (2004-03-25 16:17) [9]

u menaj takoje poluchilos" :o)

If ((R*10)-Trunc(R*10))<0.5 then
  R:=R+(0.5-((R*10)-Trunc(R*10)))/10
Else
  R:=R+((Trunc(R*10)+1)-(R*10))/10;

tol"ko nado poiskat", chto-bi xx.x5 ne okrugljal


 
TransparentGhost   (2004-03-25 16:22) [10]

A cherez stroku vrode tak...ne proverjal :

S:=Format("%1.1f",[R*10]);
If S[Length(S)] in ["1".."4"] then
  S[Length(S)]:="5"
Else
If S[Length(S)] in ["6".."9"] then
Begin
  S[Length(S)-2]:=Chr(Ord(S[Length(S)-2])+1);
  S[Length(S)]:="0"
End;


 
TransparentGhost   (2004-03-25 16:23) [11]

zabil dopisat" v konce :
R:=StrToFloat(S);


 
Defunct ©   (2004-03-25 16:52) [12]

highlander   (25.03.04 15:46)  

Result := (Trunc(X*10)+0.5)/10;


 
Defunct ©   (2004-03-25 16:54) [13]

Пардон, немножко ошибся:

Result := (Trunc(X*20)+1)/20;


 
highlander   (2004-03-26 09:33) [14]

To> TransparentGhost  
Большое спасибо!!! Пробовал работь со вторым вариантом (со строками). Работает на ура!!! Только сделал я небольшу коректировочку
вместо
S:=Format("%1.1f",[R*10]);
написал S:=Format("%1.1f",[R]);
и все получилось
Первый вариант не пробовал, поленился. Еще раз спасибо


 
highlander   (2004-03-26 09:43) [15]


> TransparentGhost  
А еще я отрыл очень полезную функцию :-) RoundTo звется :-)



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

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
1-1082644792
моё_имя
2004-04-22 18:39
2004.04.11
закрытие MDI-формы


1-1082446308
V-Isa
2004-04-20 11:31
2004.04.11
JPEG and GIF -->> TBitMap


1-1082433197
Bond
2004-04-20 07:53
2004.04.11
Печать


11-1068676969
nsvi
2003-11-13 01:42
2004.04.11
Cursor


14-1079088621
Странник Вселенной
2004-03-12 13:50
2004.04.11
О выздоровлении от РАКА





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский