Форум: "Основная";
Текущий архив: 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