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

Вниз

Округление   Найти похожие ветки 

 
Стас   (2002-01-22 08:43) [0]

Не могу в Delphi найти функции округления до определенного знака после запятой. Неужели нету? В какой библиотеке ее поискать или самому описывать?


 
Hawk2   (2002-01-22 09:43) [1]

Попробуй эту:
FORMATNUMERIC("#.##",S) где #.## - маска, а S - число (или можно подставить выражение).


 
Johnny   (2002-01-22 09:49) [2]

Не знаю, есть ли эта функция в D5, но в D6 есть:
модуль Math, SimpleRoundTo(...)


 
WhiteRat   (2002-01-22 10:14) [3]

Я делал так:


function RoundExt(Arg: Real; Digits: Byte): Real
var
i: Byte;
rounder: LongInt;
begin
rounder := 1;
for i := 1 to Digits do rounder := rounder*10;
Result := Arg*rounder;
Result := Round(Result);
Result := Result/rounder;
end;


 
kat ©   (2002-01-22 10:23) [4]

А я делаю так
function RoundDig(x:real;d:byte):real;
var
s:string;
len, i:integer;
begin
len := length(FloatToStr(x));
str(x:len:d,s);
val(s,result,i);
end;


 
Johnny   (2002-01-22 11:14) [5]

to WhiteRat
не знаю как у кого, но у меня эта функция в определенном случае работать не будет, например:
RoundExt(1.325,2) будет давать результат 1.32, а не 1,33
хотя
RoundExt(1.3251,2) уже будет 1.33
вероятно это зависит от настроек округления
а вот пример kat вроде работает нормально



 
Стас   (2002-01-22 11:48) [6]

Удалено модератором


 
kat ©   (2002-01-22 12:03) [7]

Добавляешь новый unit (File/New/Unit)
В него вставляешь функцию, получится что-то такое
unit Unit2;
interface
uses Sysutils;
function RoundDig(x:real;d:byte):real;
implementation
function RoundDig(x:real;d:byte):real;
var
s:string;
len, i:integer;
begin
len := length(FloatToStr(x));
str(x:len:d,s);
val(s,result,i);
end;
end.
А потом в том модуле, где надо вызвать определенную в unit2 функцию, в строчке uses напишешь unit2


 
DmitryS   (2002-01-22 12:34) [8]

Попробуй так

function TruncTo2Digit(Arg: Double): Double;
begin
Result:= Round(Arg * 100.0) / 100.0;
end;

или так

function TruncTo5Digit(Arg: Double): Double;
begin
Result:= Round(Arg * 100000.0) / 100000.0;
end;

Можно испоьзовать Trunc или Round в зависимости от того округлять или отрезать знаки.


 
dmaznich   (2002-01-22 12:39) [9]

Попробуй так

function TruncTo2Digit(Arg: Double): Double;
begin
Result:= Round(Arg * 100.0) / 100.0;
end;

или

function TruncTo5Digit(Arg: Double): Double;
begin
Result:= Round(Arg * 100000.0) / 100000.0;
end;

Можно использовать Trunc или Round по необходимости.


 
Стас   (2002-01-22 13:48) [10]

Спасибо всем.
Почему-то мое второе сообщение удалено модератором.
>> kat © (22.01.02 12:03). Молодец, успел(-а) ответить. Воспользуюсь.


 
Arkady   (2002-01-26 18:38) [11]

К сожалению, использовать функцию round в Delphi нельзя. Если округляемое число находится ровно посередине между двумя целыми числами, то округление производится до ближайшего четного числа. Например, результатом round(4,5) будет 4, а не 5. Предлагаю свой вариант (n – округляемое число, d – число знаков после запятой):

function rnd(n:extended; d:shortInt):extended;
var deg:extended;
begin
deg:=power(10,d);
if n>0 then rnd:=trunc(n*deg+0.5)/deg else
rnd:=trunc(n*deg-0.5)/deg;
end;


 
Стас   (2002-01-28 07:59) [12]

Вообще-то я уже нашел подходящий вариант, но все равно спасибо. А может просто из 6 Delphi вытянуть эту функцию из Math?



Страницы: 1 вся ветка

Текущий архив: 2002.02.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
1-66582
Di_wind
2002-02-05 20:23
2002.02.21
Zip


1-66571
Val
2002-02-05 12:23
2002.02.21
Форма форм :)


14-66659
Blackweber
2001-12-29 22:28
2002.02.21
Замечание модераторам!


3-66423
wicked
2002-01-25 15:39
2002.02.21
асинхронное ADO


14-66684
Ender
2001-12-29 20:04
2002.02.21
Скачка Сайтов