Maison >développement back-end >Golang >Comment formater une valeur Go float64 en une chaîne de largeur fixe avec un maximum de chiffres significatifs ?

Comment formater une valeur Go float64 en une chaîne de largeur fixe avec un maximum de chiffres significatifs ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-03 18:31:10797parcourir

How to Format a Go float64 Value into a Fixed-Width String with Maximum Significant Digits?

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

En Go, lors de l'impression de valeurs float64 dans un nombre fixe table de largeur, il est souvent souhaitable de conserver autant de chiffres significatifs que possible. Cependant, le formatage par défaut peut entraîner une perte de précision en raison du passage automatique à la notation scientifique pour les grands nombres.

La nécessité d'une solution de formatage personnalisée

Pour les cas où la notation scientifique et la forme régulière sont inacceptables, une approche de formatage personnalisée est requise. L'objectif principal doit être de calculer la précision optimale qui s'adapte à la largeur spécifiée tout en conservant le maximum de chiffres significatifs.

Solution proposée

La mise en œuvre suivante offre une solution simple :

<br>// format12 formate x pour qu'il comporte 12 caractères.<br>func format12(x float64) string {</p>
<pre class="brush:php;toolbar:false">if x >= 1e12 {
    s := fmt.Sprintf("%.g", x)
    format := fmt.Sprintf("%%12.%dg", 12-len(s))
    return fmt.Sprintf(format, x)
}

s := fmt.Sprintf("%.0f", x)
if len(s) == 12 {
    return s
}
format := fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1)
return fmt.Sprintf(format, x)

}

Cette solution utilise un processus en deux étapes :

  1. Détermination de la précision :

    • Pour les valeurs supérieure ou égale à 1e12, une notation scientifique avec une précision appropriée est utilisée.
    • Pour les valeurs plus petites, une forme régulière avec une précision suffisante est calculée en fonction de la longueur de la partie entière.
  2. Création du formatage Chaîne :

    • En fonction de la précision calculée, une chaîne de formatage personnalisée est construite pour garantir la largeur fixe souhaitée.

Exemples d'utilisation et de sortie

Pour démontrer sa fonctionnalité, considérons quelques exemples valeurs :

<br>fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0,</p>
<pre class="brush:php;toolbar:false">9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}

pour _, f := plage fs {

fmt.Println(format12(f))

}

Sortie :

<br>0,000 0000000<br>0.1234567890<br>1234.5678901<br>123456789012<br>1.234568e 12<br>9405090880.5<br>9.405091e 19<br>9.40509e 119<br>

Cette solution fournit le formatage à largeur fixe souhaité tout en préservant un maximum de chiffres significatifs, permettant un affichage clair et affichage concis des valeurs float64 dans divers scénarios.

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