假設我有一個非常準確的輸入數字(字串格式),在數學/大操作之后,我想再次轉換為字串格式。
package main
import (
"fmt"
"math/big"
"os"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
// edit
s := "3.1415926123456789123456789123456789123456789"
var n, _ = new(big.Float).SetString(s)
// var n = big.NewFloat(3.1415926123456789123456789123456789123456789)
fmt.Println(n) // 3.1415926123456788
N := n.String()
fmt.Println(N) // 3.141592612
d1 := []byte(N)
err := os.WriteFile("./dat1.txt", d1, 0644) // 3.141592612
check(err)
}
如何將像 3.1415926123456789123456789123456789123456789 這樣的大 Float 保存到檔案中?我想保留所有小數點,或者至少盡可能多
uj5u.com熱心網友回復:
您可以“精確地”決議和存盤您的輸入,但您必須提高精度(默認精度不包括)。Float.SetPrec()為此使用(需要位計數)。
生成文本表示時Float.Text(),再次使用具有足夠大的精度(需要十進制數字計數)。如果您不知道所需的數字精度,根據檔案,您可以使用負值來獲得Float's 尾數位所需的最小十進制數字數。
例如:
s := "3.1415926123456789123456789123456789123456789"
fmt.Println(s)
n := big.NewFloat(0)
n.SetPrec(200)
n.SetString(s)
N := n.Text('f', 50)
fmt.Println(N)
N = n.Text('f', -1)
fmt.Println(N)
這將輸出(在Go Playground上嘗試):
3.1415926123456789123456789123456789123456789
3.14159261234567891234567891234567891234567890000000
3.1415926123456789123456789123456789123456789
uj5u.com熱心網友回復:
我剛剛查看了 String 方法的作用及其檔案(https://pkg.go.dev/math/big#Float.String)。
字串格式 x 像 x.Text('g', 10)...
所以讓我們去看看那個方法檔案。
func (x *Float) Text(format byte, prec int) string
Text 根據給定的格式和精度 prec 將浮點數 x 轉換為字串。
精度 prec 控制位數...負精度選擇唯一標識值 x 所需的最小十進制位數
您所需要的只是閱讀檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334898.html
標籤:走
