Форум: "Базы";
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];
ВнизОкругление Найти похожие ветки
← →
Стас (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c