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
Libérer: 2024-12-03 18:31:10
original
838 Les gens l'ont consulté

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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)
Copier après la connexion

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}
Copier après la connexion

pour _, f := plage fs {

fmt.Println(format12(f))
Copier après la connexion

}

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!

Article précédent:Comment construire une instance time.Time avec un décalage de fuseau horaire spécifique dans Go ? Article suivant:Quelle est la différence entre « go build » et « go install », et où installent-ils les exécutables ?
Déclaration de ce site Web
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
Derniers articles par auteur
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal