Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-66642
jdr
2001-12-01 03:07
2002.02.21
сокеты


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


3-66468
drpass
2002-01-28 14:26
2002.02.21
Это глюк или я чего-то не понимаю?


1-66616
irq
2002-02-06 15:31
2002.02.21
Каледарь


1-66607
oomneeq
2002-02-04 18:21
2002.02.21
TFieldDef через TField ?





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