Bagaimana untuk mengelakkan kehilangan ketepatan di Golang
Di Golang, kerana ciri-ciri pengiraan titik terapung, kehilangan ketepatan kadang-kadang berlaku. Artikel ini akan berkongsi beberapa kaedah untuk mengelakkan kehilangan ketepatan di Golang dan memberikan contoh kod khusus.
Jenis float64 Golang mungkin kehilangan ketepatan apabila berurusan dengan perpuluhan. Untuk mengelakkan situasi ini, kita boleh menggunakan jenis Perpuluhan daripada pustaka pihak ketiga github.com/shopspring/decimal
dan bukannya 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) }
另一种避免精度丢失的方法是将小数转换为整数进行计算,然后再将结果转换回小数。
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) }
如果需要处理非常大的整数,可以使用 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) }
matematik/besar
terbina dalam Golang untuk melakukan pengiraan untuk mengelakkan. masalah kehilangan ketepatan. 🎜rrreee🎜Melalui kaedah di atas, kita dapat mengelakkan masalah kehilangan ketepatan di Golang dan memastikan keputusan pengiraan kita adalah tepat. Artikel ini boleh membantu anda. 🎜Atas ialah kandungan terperinci Cara untuk mengelakkan kehilangan ketepatan di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!