![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre Expert
![]() Date d'inscription: avril 2006
Messages: 1 000
|
Bonjour,
Contrairement à la fonction Round qui arrondi un nombre à sa valeur la plus proche en fonction des décimales choisies, je vous propose la fonction RoundUP qui arrondi un nombre à sa valeur supérieure en fonction des décimales choisies et, pour ne pas me faire couper l'herbe sous le pied Voici le code et des exemples pour désherber tout ça : Code :
Public Function RoundUp(vValeur As Variant, Optional byNbDec As Byte) As Variant RoundUp = -Int(-vValeur * 10 ^ byNbDec) / 10 ^ byNbDec End Function Public Function RoundDown(vValeur As Variant, Optional byNbDec As Byte) As Variant RoundDown = Int(vValeur * 10 ^ byNbDec) / 10 ^ byNbDec End Function Code :
MsgBox "Round: " & Round(5.2) ' 5 MsgBox "RoundUp: " & RoundUp(5.2) ' 6 MsgBox "RoundDown: " & RoundDown(5.2) ' 5 MsgBox "Round: " & Round(0.5) ' 0 BUG ???????????????? MsgBox "RoundUp: " & RoundUp(0.5) ' 1 MsgBox "RoundDown: " & RoundDown(0.5) ' 0 MsgBox "Round: " & Round(-0.5) ' 0 BUG ???????????????? MsgBox "RoundUp: " & RoundUp(-0.5) ' 0 MsgBox "RoundDown: " & RoundDown(-0.5) ' -1 MsgBox "Round: " & Round(2.51, 1) 'renvoie 2,5 MsgBox "RoundUp: " & RoundUp(2.51, 1) 'renvoie 2,6 MsgBox "RoundDown: " & RoundDown(2.51, 1) 'renvoie 2,5 MsgBox "Round: " & Round(-2.56, 1) 'renvoie -2,6 MsgBox "RoundUp: " & RoundUp(-2.56, 1) 'renvoie -2,5 MsgBox "RoundDown: " & RoundDown(-2.56, 1) 'renvoie -2,6 Philippe |
|
|
|
|
|
#2 (permalink) |
![]() ![]() Date d'inscription: octobre 2004
Localisation: Mâcon
Messages: 5 851
|
Qu'est ce que tu penses de cette proposition
Code :
Enum myRoundEnum myRoundup = -1 myRoundDown = 1 End Enum Public Function myRound(vValeur As Variant, Optional byNbDec As Byte, Optional eSens As myRoundEnum = myRoundup) As Variant myRound = eSens * Int(eSens * vValeur * 10 ^ byNbDec) / 10 ^ byNbDec End Function Sub test() MsgBox myRound(4.333, 1, myRoundup) MsgBox myRound(4.333, 1, myRoundDown) End Sub
__________________
Tutoriel : Gestion de favoris sous Access 2007 Cours : Manipulation des fichiers en VBA
|
|
|
|
|
|
#4 (permalink) |
|
Membre habitué
![]() Date d'inscription: juin 2005
Messages: 151
|
ce genre de fonction s'ajoute dans la partie "Modules" n'est ce pas ?
peut on ensuite utiliser la fonction dans une requete SQL ? peut on ensuite utiliser la fonction dans une requete SQL appellé via ODBC ? Dernière modification par tatayoyo ; 14/06/2007 à 14h24 |
|
|
|
|
|
#5 (permalink) |
|
Membre Expert
![]() Date d'inscription: avril 2006
Messages: 1 000
|
bonjour,
En principe oui mais le paramètre optional ne l'est plus et l'enum n'est pas reconnu (mettre la valeur correspondante). Il faut mettre les fonctions publiques dans un module standard. Le plus simple peut être est d'écrire seulement la ligne de code de la fonction dans votre requête SQL. J'en profite pour mettre le code des fonctions qui permettent aussi d'arrondir à la dizaine (-1), centaine (-2), etc... supérieur ou inférieure. Je limite la puissance 10 à 5 pour éviter un overflow. Code :
Public Function RoundUp(ByVal vValeur As Variant, Optional ByVal iNbDecimal As Integer) As Variant If Abs(iNbDecimal) < 5 Then RoundUp = -Int(-vValeur * 10 ^ iNbDecimal) / 10 ^ iNbDecimal End Function Public Function RoundDown(ByVal vValeur As Variant, Optional ByVal iNbDecimal As Integer) As Variant If Abs(iNbDecimal) < 5 Then RoundDown = Int(vValeur * 10 ^ iNbDecimal) / 10 ^ iNbDecimal End Function Code :
Debug.Print RoundUp(1104, -2) '=> 1200 Debug.Print RoundDown(116.5, -1) '=> 110 Debug.Print RoundUp(-1, -1) '=> 0 Debug.Print RoundDown(-1, -2) '=> -100 Philippe |
|
|
|
![]() |
![]() |
||
[Fait]Arrondir un nombre à sa valeur supérieure ou inférieure
|
||
| Outils de la discussion | |
|
|