SQLRound (rtl)
De Wiki1000
(Différences entre les versions)
Ligne 1 : | Ligne 1 : | ||
− | |||
<source lang='delphi'>Function SQLRound(D:Double; len:Integer):Double;</source> | <source lang='delphi'>Function SQLRound(D:Double; len:Integer):Double;</source> | ||
− | + | Cette fonction arrondie un nombre flottant suivant la même syntaxe que la fonction SQL ROUND. | |
{|class="wikitable" | {|class="wikitable" | ||
|- | |- | ||
|Result | |Result | ||
− | | | + | |Valeur arrondie. |
|- | |- | ||
|D | |D | ||
− | | | + | |Valeur à arrondir |
|- | |- | ||
|len | |len | ||
− | | | + | |Spécificateur de longueur. |
− | + | ||
− | + | ||
− | + | ||
|} | |} | ||
Exemple | Exemple | ||
+ | '''Implémentation de SQLRound''' | ||
<source lang='delphi'> | <source lang='delphi'> | ||
+ | function SQLRound(f:double; len:Integer):double; | ||
+ | const fac:Array[0..8] of Extended = (1,10,100,1000,10000,100000,1000000,10000000,100000000); | ||
begin | begin | ||
+ | //ROUND(748.58,-4)= 0 | ||
+ | //ROUND(748.58,-1)= 750.00 | ||
+ | //ROUND(748.58,-2)= 700.00 | ||
+ | //ROUND(748.58,-3)= 1000.00 | ||
+ | //ROUND(123.9994,3)= 123.9990 | ||
+ | //ROUND(123.9995,3)= 124.0000 | ||
+ | // | ||
+ | if (len>=0) then | ||
+ | begin | ||
+ | if len>8 then len := 8; | ||
+ | Result := Round(f*fac[len])/fac[len]; | ||
+ | end | ||
+ | else | ||
+ | begin | ||
+ | len := -1*len; | ||
+ | if len>8 then len := 8; | ||
+ | Result := Round(f/fac[len])*fac[len]; | ||
+ | end; | ||
end; | end; | ||
</source> | </source> |
Version actuelle en date du 11 août 2009 à 16:18
Function SQLRound(D:Double; len:Integer):Double;
Cette fonction arrondie un nombre flottant suivant la même syntaxe que la fonction SQL ROUND.
Result | Valeur arrondie. |
D | Valeur à arrondir |
len | Spécificateur de longueur. |
Exemple
Implémentation de SQLRound
function SQLRound(f:double; len:Integer):double; const fac:Array[0..8] of Extended = (1,10,100,1000,10000,100000,1000000,10000000,100000000); begin //ROUND(748.58,-4)= 0 //ROUND(748.58,-1)= 750.00 //ROUND(748.58,-2)= 700.00 //ROUND(748.58,-3)= 1000.00 //ROUND(123.9994,3)= 123.9990 //ROUND(123.9995,3)= 124.0000 // if (len>=0) then begin if len>8 then len := 8; Result := Round(f*fac[len])/fac[len]; end else begin len := -1*len; if len>8 then len := 8; Result := Round(f/fac[len])*fac[len]; end; end;
Voir aussi: