Главная страница
    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.038 c
3-1079343577
Миф
2004-03-15 12:39
2004.04.11
dxDBGrid Filter


14-1082549527
ИМХО
2004-04-21 16:12
2004.04.11
the rpc server is unavailable


1-1080304137
Rusty
2004-03-26 15:28
2004.04.11
Открытие доп. окна после запуска приложения...


3-1079021398
АнНоун
2004-03-11 19:09
2004.04.11
MySQL


1-1080079870
GetIt
2004-03-24 01:11
2004.04.11
Excel





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