Главная страница
    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.046 c
6-1075700133
WM.DIGGER
2004-02-02 08:35
2004.04.11
Как определить IP шник, "забитый" в свойствах TCP ...


1-1082910623
neVIP.
2004-04-25 20:30
2004.04.11
String -> PChar


7-1075779916
dr Tr0jan
2004-02-03 06:45
2004.04.11
Команды RunDLL32 в Win2k/XP!


14-1082121118
John Doe
2004-04-16 17:11
2004.04.11
Где найти серьезные книги


11-1060108839
Юджин
2003-08-05 22:40
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский