1. Méthode d'arrondi L'arrondi est une méthode de calcul approximative très largement utilisée, qui comprend deux types: la méthode d'arrondi arithmétique et la méthode d'arrondi bancaire. La soi-disant méthode d'arrondi arithmétique est la méthode d'arrondi dans notre sens habituel. La règle est: lorsque la valeur du bit abandonnée est supérieure ou égale à 5, le bit est retiré tandis que le bit est retiré; La méthode d'arrondissement dite du banquier est essentiellement une méthode d'arrondi quatre en arrondissant six en cinq et en gardant le double (également connu sous le nom de six en cinq étranges et même). Les règles sont: lorsque la valeur du bit abandonnée est inférieure à 5, le bit est abandonné directement; Lorsque la valeur du bit gauche est abandonnée lorsqu'elle est égale à 5, si la valeur du chiffre précédent est impair, le bit est supprimé pendant que le bit est tombé. directement. Pour résumer, les résultats obtenus par les deux méthodes d'arrondi ne sont pas cohérents, ils doivent donc être distingués en fonction des besoins réels lors de leur utilisation. Sinon, des écarts inexplicables se produiront. 2. La fonction d'arrondi à Delphi est bien connue. Cependant, il met en œuvre des opérations d'arrondi selon les règles de la méthode d'arrondi bancaire. L'utilisation de la fonction d'arrondi à Delphi a toujours utilisé le rond, mais parfois j'ai constaté que les réponses obtenues en l'utilisant seront différentes de ce que nous attendions. Par exemple: i: = Round (11,5) Résultat: i = 12i: = Round (10.5) Résultat: i = 10 Oui, selon nos attentes, la deuxième fonction devrait retourner 11, mais pourquoi cela se produit-il? Pour xxx.5, la partie entière est un nombre impair, puis l'arrondissement sera arrondi. Est-ce un bug de Delphi? Ce processeur utilise la méthode d'arrondissement dite du banquier, c'est-à-dire lors de l'implémentation de la fonction ronde sur la valeur intermédiaire (comme 5.5, 6.5), le processeur détermine si l'arrondi est basé sur la nature impair et uniforme du nombre avant le Le point décimal, tel que 5,5, le résultat est 6, et le résultat de 6,5 round est également 6, car 6 est un nombre pair. La fonction ronde utilise en fait l'algorithme bancaire pour les opérations, et il est généralement statistiquement utilisé pour utiliser cet algorithme, qui est plus scientifique que notre méthode d'arrondi traditionnelle. Quelqu'un a résolu de cette façon, ajoutant une très petite valeur à 10,5, puis en appelant la fonction ronde. La cause profonde. Une autre fonction a été trouvée sur Internet: Fonction Doround (Valeur: étendue): int64; = Default8087cw; Il s'agit de la valeur du mot de contrôle du contrôleur de l'unité flottante (FPU) dans le paramètre CPU. L'idée du programme ci-dessus est très simple, ce qui consiste à économiser 8087cw en premier, puis à le définir, de sorte que lorsque même les nombres ne sont pas arrondis, et enfin restaurer 8087cw. En fait, la fonction ci-dessus peut être simple. Oldcw: = Default8087cw; une solution. En fait, Borland pensait depuis longtemps que nous rencontrerions un tel problème, et pensé que nous devions personnaliser le mode d'arrondi du FPU, il nous a donc fourni des fonctions prêtes à l'emploi à utiliser. Dans l'unité mathématique, il existe une fonction SetRoundMode. Vous trouverez ci-dessous une fonction d'arrondi Icapsulé: Fonction Roundex: étendue; SetRoundMode (RM); end; fin; Exemple: i: = Roundex (11,5) tissu? Par exemple: I: = Roundex (11,5, RMTRunCate) Résultat: i = 11i: = Roundex (10.5, rmTruncate) Résultat: i = 10roundEx La fonction a été magnifiquement transformée en fonction trunc.