Maison >développement back-end >Golang >Comment convertir un Float64 en une chaîne à largeur fixe avec un maximum de chiffres significatifs en Python ?

Comment convertir un Float64 en une chaîne à largeur fixe avec un maximum de chiffres significatifs en Python ?

DDD
DDDoriginal
2024-12-10 17:34:16644parcourir

How to Convert a Float64 to a Fixed-Width String with Maximum Significant Digits in Python?

Conversion de Float64 en chaîne à largeur fixe avec un maximum de chiffres significatifs

Lors de l'impression des valeurs float64 dans un tableau à largeur fixe, nous avons souvent besoin d'un nombre maximum de chiffres significatifs pour conserver la précision. La bibliothèque standard ne dispose pas d'une méthode pratique à cet effet.

Spécificateur de format personnalisé

Pour surmonter cette limitation, nous pouvons créer un spécificateur de format personnalisé qui s'adapte à l'ampleur de la valeur. . La stratégie consiste à examiner la valeur pour déterminer si elle nécessite une notation scientifique. Si tel est le cas, nous calculons la largeur de l’exposant et ajustons la précision de la fraction en conséquence. Sinon, nous récupérons simplement la longueur de la fraction et calculons la précision requise pour la largeur fixe.

Implémentation Python

Voici une implémentation Python de l'approche proposée :

import math

def format_float(value, width):
  """
  Converts a float to a fixed-width string with maximum significant digits.

  Args:
    value: The float value to format.
    width: The fixed width of the string.

  Returns:
    A fixed-width string containing the formatted value.
  """

  if abs(value) >= 1e12:
    # Scientific notation
    exponent = int(math.log10(abs(value)))
    fraction_width = width - len(str(exponent)) - 2
    return f"{value:.{fraction_width}g}"
  else:
    # Regular form
    fraction_length = len(str(int(value)))
    precision = width - fraction_length - 1
    return f"{value:.{precision}f}"

Exemple Utilisation

values = [0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0,
          9.405090880450127e9, 9.405090880450127e19, 9.405090880450127e119]

for value in values:
  print(format_float(value, 12))

Sortie

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn