3

Округление дробных чисел с точностью i — количество знаков после запятой, S — дробное число в строковом виде.

delphi
function FormatData(s: String ; i: Integer ): String ;
begin
Result:= FloatToStr ( Round ( StrToFloat (s)* exp (i* ln ( 10 )))/( exp (i* ln ( 10 ))));
end ;

Как округлять до сотых в большую сторону

delphi
uses Math;

// Прибавляешь 0.5 затем округляешь:

function RoundMax(Num: real ; prec: integer ): real ;
begin
result := roundto (num + Power ( 10 , prec — 1 ) * 5 , prec);
end ;

// До сотых соответственно будет:

function RoundMax100(Num: real ): real ;
begin
result := round (num * 100 + 0.5 ) / 100 ;
end ;

delphi
< **** UBPFD *********** by delphibase.endimus.com ****
>> «Округление» в большую сторону

Функция возвращает наименьшее число, большее чем Value, которое без остатка
делится на Divider

Зависимости: нет
Автор: Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright: Dimka Maslov
Дата: 20 мая 2002 г.
***************************************************** >

function Round (Value, Div >Integer ): Integer ;
asm
mov ecx, edx
cdq
idiv ecx
imul ecx
add eax, ecx
end ;

Round ( 10 , 3 ) // = 12
Round ( 9 , 3 ) // = 12

@Drkb::04078

delphi
< **** UBPFD *********** by delphibase.endimus.com ****
>> «Округление» в меньшую сторону

Функция возвращает наибольшее число,
меньшее или равное Value, которое
без остатка делится на Divider

Зависимости: нет
Автор: Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright: Dimka Maslov
Дата: 20 мая 2002 г.
***************************************************** >

function RoundPrev(Value, Div >Integer ): Integer ;
asm
mov ecx, edx
cdq
idiv ecx
imul ecx
end ;

RoundPrev( 10 , 3 ) // = 9
RoundPrev( 9 , 3 ) // = 9

@Drkb::04079

delphi
< **** UBPFD *********** by delphibase.endimus.com ****
>> «Округление» до ближайшего кратного

Функция возвращает ближайшее к Value число, которoе без
остатка делится на N. Если Value находится посередине
между двумя кратными, функция вернёт большее значение.

Зависимости: нет
Автор: Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright: Dimka Maslov
Дата: 20 февраля 2003 г.
***************************************************** >

function RoundTo (Value, N: Integer ): Integer ;
asm
push ebx
mov ebx, eax
mov ecx, edx
cdq
idiv ecx
imul ecx

add ecx, eax
mov edx, ebx
sub ebx, eax
jg @@10
neg ebx
@@10:
sub edx, ecx
jg @@20
neg edx
@@20:
cmp ebx, edx
jl @@30
mov eax, ecx
@@30:
pop ebx
end ;

@Drkb::04080

Округление дробного числа до N знаков после запятой

Автор: Perceptron

delphi
function RoundEx(chislo: double ; Precision: Integer ): string ;
var
ChisloInStr: string ;
ChisloInCurr: currency ;
begin
ChisloInCurr := chislo;
Str (ChisloInCurr: 20 : Precision, ChisloInStr);
ChisloInStr[ Pos ( ‘.’ , ChisloInStr)] := ‘,’ ;
RoundEx := Trim (ChisloInStr);
end ;

procedure TForm1.Button1Click(Sender: TObject );
begin
Edit1.Text := RoundEx( StrToFloat (Edit1.Text), 2 );
end ;

Округление чисел c определенной точностью

delphi
function Rounder( var Value: Double ; Decimals: Integer ): Double ;
var
j: Integer ;
A: Double ;
begin
A := 1 ;
case Decimals of
0 : A := 1 ;
1 : A := 10 ;
else
for j := 1 to Decimals do
A := A * 10 ;
end ;
Result := Int ((Value * A) + 0.5 ) / A;
end ;

procedure TForm1.Button1Click(Sender: TObject );
var
Value: Double ;
begin
Value := 23.56784 ;
//Result is 23.57
label1.Caption := FloatToStr (Rounder(Value, 2 ));
end ;

@Drkb::04082
Взято с сайта: http://www.swissdelphicenter.ch

delphi
<
The function Round of the Delphi doesn’t work
like it is usually expected.
The odd numbera are rounded down and the even numbers up.

x:= Round(17.5) = x = 18

x:= Round(12.5) = x = 12
>

function DoRound( const X: Extended ): Int64 ;
begin
Result := 0 ;
if X0 then
Result := trunc (X + 0.5 );
if Xthen
Result := trunc (X — 0.5 );
end ;

procedure TForm1.Button1Click(Sender: TObject );
begin
ShowMessage( FormatFloat ( ‘0.00’ , DoRound( 17.5 ))); // — 18
ShowMessage( FormatFloat ( ‘0.00’ , DoRound( 12.5 ))); // — 13

//This rounds every value to 0.05 steps
//Rundet in 0.05 Schritten
ShowMessage( FormatFloat ( ‘0.00’ , Round ( 17.22 / 0.05 ) * 0.05 )); // — 17.20
end ;

function RoundUp(Value: Extended ): Int64 ;
procedure Set8087CW (NewCW: Word );
asm
MOV Default8087CW,AX
FNCLEX
FLDCW Default8087CW
end ;
const
RoundUpCW = $1B32 ;
var
OldCW: Word ;
begin
OldCW := Default8087CW;
try
Set8087CW (RoundUpCW);
Result := Round (Value);
finally
Set8087CW (OldCW);
end ;
end ;

Оцените статью
Добавить комментарий