# -*- coding:utf-8 -*- __projet__ = "CoursS5" __nom_fichier__ = "10_arrondibancaire" __author__ = "A-J. Tinet" __date__ = "avril 2023" """ ======================================================================================================================== Ex. 10 - ARRONDI BANCAIRE ======================================================================================================================== """ def decimale_n(x, n): """ :param x: nombre flottant :param n: nombre entier :return: nombre entier, nième décimale de x """ x = x * 10**n return int(x)%10 def arrondi_pair(n): """ :param n: nombre entier :return: 1er nombre entier pair supérieur ou égal à n """ if n%2 == 0: return n return n+1 def arrondi_bancaire(x, d = 2): """ :param x: nombre flottant :param d: nombre entier, décimale à laquelle on cherche à arrondir x :return: nombre flottant, arrondi bancaire de x """ # Précision n = 10**d # 3ème décimale de nb dd = decimale_n(x, d+1) # Cas 1 - on conserve les deux premières décimales sans les modifier if dd <= 4: return (int(x * n)) / n # Cas 2 - on arrondi les deux premières décimales au nombre supérieur (arrondi classique) if dd >= 6: return (int(x * n) + 1) / n # Cas 3 - si le nombre a plus de trois décimales, on arrondi les deux premières décimales au nombre supérieur if x != round(x, d+1): return (int(x * n) + 1) / n # Cas 4 - on arrondi les deux premières décimales au nombre pair supérieur return (arrondi_pair(int(x * n))) / n # Programme principal if __name__ == '__main__': # Test de decimale_n print(decimale_n(5.02, 6)) # 0 print(decimale_n(5.687194526, 5)) # 9 # Test de arrondi bancaire print(arrondi_bancaire(3.2464)) # 3.25 print(arrondi_bancaire(3.54398)) # 3.54 print(arrondi_bancaire(3.2356)) # 3.24 print(arrondi_bancaire(3.245)) # 3.24 print(arrondi_bancaire(3.715)) # 3.72 print(arrondi_bancaire(3.54398,1)) # 3.5