Главная страница
    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.044 c
14-1082017092
Empleado
2004-04-15 12:18
2004.04.11
nostalgie


14-1079631277
IA Kamerad
2004-03-18 20:34
2004.04.11
меня что, вынуждают регистрироваться?


6-1075815393
Davey
2004-02-03 16:36
2004.04.11
*Сетевые соединения процессов*


3-1082012028
Slavik_v
2004-04-15 10:53
2004.04.11
Импорт данных из Excel


1-1079512590
Денис2004
2004-03-17 11:36
2004.04.11
RTF2HTML





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