Select the product you need help with
Comment faire pour implémenter personnalisé arrondi procéduresNuméro d'article: 196652 - Voir les produits auxquels s'applique cet article SommaireRésuméIl existe un certain nombre de différents algorithmes d'arrondi dans les produits Microsoft. Arrondi des algorithmes comprises entre Arithmetic arrondi en fonction de feuille de calcul Round() d'Excel Banker Rounding dans les fonctions CInt() CLng() et Round() dans Visual Basic pour applications. Cet article décrit quelles les divers Visual Basic pour applications, fonctions d'arrondi faire et fournit des exemples de l'utilisation des fonctions. En outre, l'article inclut des exemples de fonctions qui implémentent les différents algorithmes d'arrondi. Plus d'informationsArrondi explicationVous devez arrondir lorsque vous souhaitez convertir un nombre de plus grande précision en nombre de précision moindre. Le cas le plus courant est lorsque vous avez besoin convertir un nombre à virgule flottante en un entier.Arrondi vers le basLa forme la plus simple d'arrondi est troncature. Les chiffres après la précision de votre choix sont simplement ignorés. La fonction VBA Fix() est un exemple de troncature. Par exemple, Fix(3.5) est 3 et Fix(-3.5) est de -3.La fonction Int() Arrondit vers le bas à l'entier plus élevée inférieure à la valeur. À la fois int() et Fix() agir de la même façon avec des nombres positifs-troncation - mais donner des résultats différents pour les nombres négatifs : Int(-3.5) donne -4. La fonction Fix() est un exemple d'arrondi symétrique, car elle affecte l'amplitude (valeur absolue) des nombres positifs et négatifs de la même manière. La fonction int() est un exemple d'arrondi asymétriques, car elle affecte l'ampleur des nombres positifs et négatifs différemment. Excel dispose de fonctions de feuille de calcul similaires : Int() Floor() et RoundDown(). Int() fonctionne de la même façon comme int() fait dans Visual Basic pour applications. Floor() tronque les valeurs positives, mais ne fonctionne pas avec des nombres négatifs. La fonction RoundDown() fonctionne de la même façon que la fonction VBA Fix(). Microsoft SQL Server possède une fonction Round() qui peut agir comme la fonction VBA Fix(). SQL Server possède également une fonction Floor(), qui fonctionne de la même manière que la fonction VBA int(). Arrondi vers le hautSQL Server et Excel ont une fonction appelée Ceiling(), arrondit toujours les valeurs de fraction jusqu'à (plus positif) à la valeur suivante.Visual Basic pour applications n'a pas une fonction d'arrondi à distance correspondante. Toutefois, pour les nombres négatifs, à la fois Fix() et int() peuvent servir à arrondir vers le haut, de différentes manières. Fix() arrondit à 0 (haut dans la mesure absolue, mais vers le bas en termes de magnitude absolue). Fix(-3.5) est-3.5. Int() arrondit s'éloignant de 0 (haut en termes de magnitude absolue, mais vers le bas dans la mesure absolue). Int(-3.5) est de -4. Arrondi arithmétiqueLorsque vous arrondissez toujours vers le bas ou haut, le numéro qui en résulte n'est pas nécessairement la plus proche du nombre d'origine. Par exemple, si vous arrondissez 1,9 pour 1, la différence est beaucoup plus grande que si vous l'arrondit à 2. Il est facile de voir que les numéros de 1,6 à 2,4 doivent être arrondis à 2.Toutefois, qu'en est-il 1.5, qui est équidistants entre 1 et 2 ? Par convention, le nombre de moitié est arrondi. Vous pouvez mettre en ?uvre en arrondissant les nombres de la moitié de manière symétrique, telle que -0,5 est arrondi à -1 ou de manière asymétrique, où -0,5 est arrondi à 0. Les fonctions suivantes fournissent des arrondi arithmétique symétrique : La fonction de feuille de calcul Excel Round(). La fonction de SQL Server Round() faire arrondi arithmétique symétrique. La fonction suivante fournissent arrondi arithmétique asymétrique : La méthode Round() de la bibliothèque Java Math. Visual Basic pour applications est dépourvu de toute fonction qui effectue l'arrondi arithmétique. Arrondi bancaireLorsque vous ajoutez valeurs arrondies, toujours arrondi.5 dans la même direction entraîne un écart qui accompagne les nombres plus ajoute ensemble. Outre la méthode qui consiste à réduire le décalage, vous avec l'arrondi.Arrondi arrondit bancaire.5 parfois haut et bas parfois. La convention est d'arrondir au nombre pair plus proche, afin que 1.5 et 2.5 sont arrondies à 2 et 3.5 et 4.5, que les deux sont arrondies à 4. L'arrondi est symétrique. Dans Visual Basic pour applications, les fonctions numériques suivantes effectuent l'arrondi : CByte() CInt(), CLng(), CCur() et Round(). Il existe sans fonctions de feuille de calcul Excel qui effectuent l'arrondi. Arrondi aléatoireMême l'arrondi peut arranger des totaux. Vous pouvez tirer une étape supplémentaire pour supprimer de polarisation en arrondi.5 vers le haut ou vers le bas de façon réellement aléatoire. Ainsi, même si les données sont délibérément biaisées, POLARISATION peut être réduite. Toutefois, en l'arrondissant aléatoire avec les données distribuées de façon aléatoire peut entraîner un écart plus grand que l'arrondi. Arrondi aléatoire, vous risquez de deux totaux de différents sur les mêmes données.Aucun produit Microsoft n'implémente n'importe quelle sorte de procédure arrondi aléatoire. Autre arrondiAutre arrondi est arrondi comprise entre 0.5 haut et bas.5 sur les appels successifs.Aucun produit Microsoft n'implémente une autre procédure d'arrondi. La fonction Round() est implémenté de façon incohérenteLa fonction Round() n'est pas implémentée de façon cohérente entre les différents produits Microsoft pour des raisons historiques.Le tableau suivant référence produit à la mise en oeuvre :
Product Implementation
----------------------------------------------------------------------
Visual Basic for Applications 6.0 Banker's Rounding
Excel Worksheet Symmetric Arithmetic Rounding
SQL Server Either Symmetric Arithmetic Rounding
or Symmetric Round Down (Fix)
depending on arguments
Java Math library Asymmetric Arithmetic Rounding
La fonction Round() dans Visual Basic 6.0 et Visual Basic pour applications 6.0 effectue l'arrondi. Il possède un argument deuxième facultatif qui spécifie le nombre de chiffres décimaux à arrondir à : Exemple de donnéesLe tableau suivant répertorie des exemples de données et les effets de différentes méthodes d'arrondi sur les numéros et les totaux générés.
Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt.
---------------------------------------------------------------------
-2.6 -3 -2 -2 -3 -3 -3 -3 -3
-2.5 -3 -2 -2 -2 -3 -2 -2 -3
-2.4 -3 -2 -2 -2 -2 -2 -2 -2
-1.6 -2 -1 -1 -2 -2 -2 -2 -2
-1.5 -2 -1 -1 -1 -2 -2 -1 -1
-1.4 -2 -1 -1 -1 -1 -1 -1 -1
-0.6 -1 0 0 -1 -1 -1 -1 -1
-0.5 -1 0 0 0 -1 0 -1 -1
-0.4 -1 0 0 0 0 0 0 0
0.4 0 0 1 0 0 0 0 0
0.5 0 0 1 1 1 0 1 1
0.6 0 0 1 1 1 1 1 1
1.4 1 1 2 1 1 1 1 1
1.5 1 1 2 2 2 2 1 1
1.6 1 1 2 2 2 2 2 2
2.4 2 2 3 2 2 2 2 2
2.5 2 2 3 3 3 2 3 3
2.6 2 2 3 3 3 3 3 3
Total de tous les numéros : Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt. --------------------------------------------------------------------- 0.0 -9 0 9 3 0 0 1 0 Total de tous les nombres négatifs : Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt. --------------------------------------------------------------------- -13.5 -18 -9 -9 -12 -15 -13 -13 -14 Total de tous les nombres positifs : Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt. --------------------------------------------------------------------- 13.5 9 9 18 15 15 13 14 14 Le tableau indique la différence entre les différentes méthodes d'arrondi. Pour les nombres positifs et négatifs répartis de manière aléatoire, Fix(), arrondi arithmétique symétrique, l'arrondi et arrondi alternés fournissent de la différence de moins de valeurs réelles, avec arrondi aléatoire pas loin derrière. Toutefois, si les nombres sont soit toutes positives ou négatives tout, bancaire arrondi, en alternance d'arrondi et arrondi aléatoire fournissent la différence au moins des totaux réels. Exemple arrondi des fonctions définies par l'utilisateurL'exemple de code dans la section liste de fonction suivante fournit des implémentations échantillon pour chacun des types d'arrondi décrites.Les fonctions fournies sont les suivantes :
AsymDown Asymmetrically rounds numbers down - similar to Int().
Negative numbers get more negative.
SymDown Symmetrically rounds numbers down - similar to Fix().
Truncates all numbers toward 0.
Same as AsymDown for positive numbers.
AsymUp Asymmetrically rounds numbers fractions up.
Same as SymDown for negative numbers.
Similar to Ceiling.
SymUp Symmetrically rounds fractions up - that is, away from 0.
Same as AsymUp for positive numbers.
Same as AsymDown for negative numbers.
AsymArith Asymmetric arithmetic rounding - rounds .5 up always.
Similar to Java worksheet Round function.
SymArith Symmetric arithmetic rounding - rounds .5 away from 0.
Same as AsymArith for positive numbers.
Similar to Excel Worksheet Round function.
BRound Banker's rounding.
Rounds .5 up or down to achieve an even number.
Symmetrical by definition.
RandRound Random rounding.
Rounds .5 up or down in a random fashion.
AltRound Alternating rounding.
Alternates between rounding .5 up or down.
ATruncDigits Same as AsyncTrunc but takes different arguments.
Toutes ces fonctions acceptent deux arguments : le nombre à arrondir et un facteur facultatif. Si le facteur est omis, les fonctions renvoient un nombre entier créé par l'une des méthodes ci-dessus. Si le facteur est spécifié, le nombre est ajustée selon le facteur de créer différents effets d'arrondi. Par exemple AsymArith (2.55, 10) produit 2.6, est, elle arrondi à 1/facteur = 1/10 = 0.1. Remarque : Un facteur de 0 génère une erreur d'exécution: 1/facteur = 1/0. Le tableau suivant montre les effets de divers facteurs : Expression Result Comment -------------------------------------------------------------------- AsymArith(2.5) 3 Rounds up to next integer. BRound(2.18, 20) 2.2 Rounds to the nearest 5 cents (1/20 dollar). SymDown(25, .1) 20 Rounds down to an even multiple of 10. L'exception à la description ci-dessus est ADownDigits, qui est une fonction de modèle vous permet de spécifier le nombre de décimales au lieu d'un facteur. Expression Result Comment --------------------------------------------------------------------- ADownDigits(2.18, 1) 2.1 Rounds down to next multiple of 10 ^ -1. Fonction listeRemarque: À l'exception des fonction de feuille de calcul d'Excel MRound(), intégrée - in arrondi fonctions accepter des arguments de la manière de ADownDigits, où le deuxième argument spécifie le nombre de chiffres au lieu d'un facteur. Les implémentations d'arrondi présentées ici utilisent un facteur comme MRound(), qui est plus souple car vous n'avez pas à arrondir à une puissance de 10. Vous pouvez écrire des fonctions wrapper de la manière de ADownDigits. Flottante point limitationsTous les implémentations d'arrondi présentées ici utilisent le type de données double qui peut représenter environ 15 chiffres décimaux.Dans la mesure où pas toutes les valeurs fractionnaires peuvent être exprimées exactement, vous pouvez obtenir des résultats inattendus parce que la valeur d'affichage ne correspond pas à la valeur stockée. Par exemple, le nombre 2.25 peut être stocké en interne comme 2.2499999..., qui serait arrondir avec des arrondis arithmétique, au lieu de haut comme prévu. En outre, les calculs plus qu'un nombre est soumis à la possibilité d'une plus grande que la valeur binaire stockée va s'écarter de la valeur décimale idéale. Si tel est le cas, vous souhaiterez peut-être choisir un autre type de données, tels que monétaire, qui est exacte à 4 décimales. Vous pouvez également envisager fabrication les types de données Variant et l'utilisation CDec() tout convertir le type de données Decimal, qui peut être exactement à 28 chiffres décimaux. Arrondi des valeurs monétairesLorsque vous utilisez le type de données monétaire, qui est exact à 4 chiffres décimaux, vous souhaitez généralement arrondir à 2 chiffres décimaux pour cents.La fonction Round2CB ci-dessous est une variante codée en dur qui effectue l'arrondi à 2 chiffres décimaux, mais ne multiplie pas le numéro d'origine. Cela permet d'éviter une situation de débordement possible si le montant monétaire approchent des limites du type de données de devise. Arrondi des valeurs decimalVoici un exemple d'asymétrique arrondi arithmétiques à l'aide du type de données decimal :Suppression de Precision comme un raccourci dans arrondiComme enseignées dans l'établissement, l'arrondi est généralement arithmétique arrondi à l'aide de numéros positif. Avec ce type d'arrondi, vous devez uniquement connaître le nombre à 1 chiffre passé où vous d'arrondi pour. Pour ignorer les chiffres après la première décimale. En d'autres termes, précision est déposée comme un raccourci vers la valeur d'arrondi.Par exemple, 2.5 et 2.51 arrondir jusqu'à 3, tandis que 2.4 et 2.49 arrondir à 2. Lorsque vous utilisez l'arrondi (ou d'autres méthodes qui arrondissent.5 haut ou vers le bas) ou lorsque vous arrondissez les nombres négatifs en l'arrondissant arithmétique asymétrique, suppression de précision peut entraîner des résultats incorrects où vous peut ne pas arrondir au nombre plus proche. Par exemple, avec l'arrondi, 2.5 arrondi vers le bas à 2 et 2.51 arrondit jusqu'à 3. Avec des arrondis arithmétique asymétrique, -2,5 arrondit-jusqu'à 2 alors que-2.51 Arrondit vers le bas pour -3. Les fonctions définies par l'utilisateur présentées dans cet article prend plus de précision du nombre en compte lors de l'exécution d'arrondi. RéférencesAide de Visual Basic, version 6.0 ; rubrique : Int, Fix fonctions ; fonction Round Aide de Microsoft Transact SQL ; rubrique : Round fonction ; fonction FLOOR ; fonction CEILING (c) 1998 Microsoft Corporation, tous droits réservés. Contribution de Malcolm Stewart, Microsoft Corporation. PropriétésNuméro d'article: 196652 - Dernière mise à jour: jeudi 15 juillet 2004 - Version: 3.2 Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
Traduction automatique IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique. La version anglaise de cet article est la suivante: 196652
(http://support.microsoft.com/kb/196652/en-us/
)
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT. | Traductions disponibles |




Retour au début








