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

Вниз

Округление чисел типа 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.039 c
14-1082029483
Kolyan
2004-04-15 15:44
2004.04.11
БЕЗОПАСНОСТЬ ПО ЛОКАЛКЕ


9-1071126992
ZAROLF
2003-12-11 10:16
2004.04.11
Помогите с физикой в 2D аркаде !


1-1079447904
Guest_Bob
2004-03-16 17:38
2004.04.11
Звук в ListView при нажатии Alt+Enter


3-1081744611
Bizon
2004-04-12 08:36
2004.04.11
Checkbox в DBGride


6-1079173998
Daimon
2004-03-13 13:33
2004.04.11
Компьютер (COM порт) <-> Сотовый телефон (Модем AT-команды )





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