Maison >développement back-end >Golang >Comment éviter la perte de précision dans Golang

Comment éviter la perte de précision dans Golang

WBOY
WBOYoriginal
2024-02-25 19:00:11494parcourir

如何避免在 Golang 中发生精度丢失

Comment éviter la perte de précision dans Golang

Dans Golang, en raison des caractéristiques des calculs en virgule flottante, une perte de précision se produit parfois. Cet article partagera quelques méthodes pour éviter la perte de précision dans Golang et fournira des exemples de code spécifiques.

1. Utilisez le type Decimal au lieu de float64

Le type float64 de Golang peut perdre en précision lorsqu'il s'agit de décimales. Pour éviter cette situation, nous pouvons utiliser le type Decimal de la bibliothèque tierce github.com/shopspring/decimal au lieu de float64. github.com/shopspring/decimal 中的 Decimal 类型来代替 float64。

package main

import (
    "fmt"
    "github.com/shopspring/decimal"
)

func main() {
    num1 := decimal.NewFromFloat(0.1)
    num2 := decimal.NewFromFloat(0.2)

    sum := num1.Add(num2)
    fmt.Println(sum)
}

2. 使用整数进行计算

另一种避免精度丢失的方法是将小数转换为整数进行计算,然后再将结果转换回小数。

package main

import "fmt"

func main() {
    num1 := 1.23
    num2 := 4.56

    precision := 1000000 // 精度为小数点后六位

    intNum1 := int(num1 * float64(precision))
    intNum2 := int(num2 * float64(precision))

    sum := intNum1 + intNum2
    result := float64(sum) / float64(precision)

    fmt.Println(result)
}

3. 使用 math/big 包处理大整数计算

如果需要处理非常大的整数,可以使用 Golang 内置的 math/big

package main

import (
    "fmt"
    "math/big"
)

func main() {
    num1 := new(big.Int)
    num1.SetString("12345678901234567890", 10)

    num2 := new(big.Int)
    num2.SetString("98765432109876543210", 10)

    sum := new(big.Int)
    sum.Add(num1, num2)

    fmt.Println(sum)
}

2. Utilisez des nombres entiers pour les calculs

Une autre façon d'éviter la perte de précision est de convertir les décimales en nombres entiers pour les calculs, puis de reconvertir les résultats en décimales. 🎜rrreee🎜3. Utilisez le package math/big pour gérer des calculs de grands entiers🎜🎜Si vous devez traiter de très grands entiers, vous pouvez utiliser le package math/big intégré de Golang pour effectuer des calculs à éviter. le problème de la perte de précision. 🎜rrreee🎜Grâce à la méthode ci-dessus, nous pouvons éviter le problème de perte de précision dans Golang et garantir que nos résultats de calcul sont exacts. Cet article peut vous aider. 🎜

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