Maison >développement back-end >Golang >Comment puis-je éviter les erreurs de précision lors de la conversion de « float64 » en « int » dans Go ?

Comment puis-je éviter les erreurs de précision lors de la conversion de « float64 » en « int » dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-17 02:24:25362parcourir

How Can I Avoid Precision Errors When Converting `float64` to `int` in Go?

Éviter les erreurs de précision lors de la conversion Float-to-Int dans Go

Lors de la conversion des valeurs float64 en int dans Go, les programmeurs rencontrent souvent des erreurs de précision . Ces erreurs surviennent en raison des limitations inhérentes à la représentation des nombres binaires sur les ordinateurs.

Comprendre la représentation binaire

Un float64 représente un nombre utilisant la norme IEEE-754, allouant 53 bits pour les chiffres et 11 bits pour l'exposant. Cependant, certains nombres, comme 100,55, ne peuvent pas être représentés exactement dans cette structure binaire finie.

Le code :

Le code suivant illustre le problème :

package main

import "fmt"

func main() {
    x := 100.55
    fmt.Println(x - float64(int(x)))    
}

Ce code génère 0,54999999999999972 au lieu du 0,55 attendu. La raison en est que la représentation binaire ne peut pas stocker précisément 100,55 et que le nombre résultant stocké dans x est légèrement différent.

Solutions :

  1. Arrondir pour l'affichage : Pour éviter les résultats trompeurs, arrondissez les nombres à virgule flottante avant de les afficher. Par exemple :

    fmt.Printf("%.2f\n", x) // Outputs: 0.55
  2. Utiliser des nombres entiers pour les calculs : Si la précision est cruciale, envisagez d'utiliser des nombres entiers pour les calculs. Par exemple, gérez la monnaie en cents plutôt qu'en dollars.

Conclusion :

Comprendre les limites de la représentation binaire et utiliser des arrondis ou des calculs basés sur des nombres entiers peuvent atténuer erreurs de précision lors de la conversion de float64 en int dans Go.

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