Maison >développement back-end >Tutoriel Python >Comment tronquer avec précision les valeurs flottantes sans arrondir ?
Tronquer des valeurs flottantes, ou supprimer des chiffres au-delà d'un nombre spécifié de décimales, est une opération courante en programmation. Cependant, obtenir une troncature précise sans arrondi peut être difficile en raison des limites de la représentation à virgule flottante.
Prenons l'exemple :
1.923328437452 -> 1.923
Un naïf L'approche serait de convertir le flottant en chaîne et de le tronquer, mais cela peut conduire à des erreurs en raison de la nature imprécise des représentations à virgule flottante. Différentes valeurs à virgule flottante peuvent avoir la même représentation binaire, ce qui entraîne une troncature ambiguë.
Pour les versions 2.7 et supérieures de Python, la fonction suivante fournit une troncature précise sans arrondi :
def truncate(f, n): '''Truncates/pads a float f to n decimal places without rounding''' s = '{}'.format(f) if 'e' in s or 'E' in s: return '{0:.{1}f}'.format(f, n) i, p, d = s.partition('.') return '.'.join([i, (d+'0'*n)[:n]])
Le cœur de cette méthode est de convertir le float en chaîne en utilisant '{}'.format(f) et de tronquer la chaîne au nombre de décimales souhaité. Pour les valeurs en notation scientifique (« e » ou « E »), la syntaxe '{0:.{1}f}'.format(f, n) est utilisée pour spécifier la précision.
Dans de rares cas, les flottants très proches des nombres ronds peuvent encore être mal tronqués. Dans de tels cas, spécifiez une précision plus élevée pour garantir que l'arrondi lors de la conversion de chaîne n'affecte pas le résultat.
Pour les versions de Python inférieures à 2.7, une méthode moins précise consiste à arrondir le flottant à 12 décimales avant la troncature :
def truncate(f, n): '''Truncates/pads a float f to n decimal places without rounding''' s = '%.12f' % f i, p, d = s.partition('.') return '.'.join([i, (d+'0'*n)[:n]])
Ce code fournit une solution robuste pour tronquer les valeurs flottantes sans arrondi, garantissant une troncature précise pour un large éventail d'entrées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!