big.Float GetString без округления - PullRequest
0 голосов
/ 06 июля 2018

Я хочу увидеть результат: "3891113451447590234" без "3891113451447590400"

bigI,_ := big.NewInt(0).SetString("3891113451447590234", 10)
bigF := big.NewFloat(0).SetInt(bigI)
fmt.Println(bigF)
fmt.Println(bigF.String())
fmt.Println(bigF.SetMode(big.AwayFromZero).Text('f', 8))
fmt.Println(bigF.SetMode(big.AwayFromZero).Text('g', 20))

3.8911134514475904e+18
3.891113451e+18
3891113451447590400.00000000
3891113451447590400

1 Ответ

0 голосов
/ 06 июля 2018

Функция big.NewFloat устанавливает точность по умолчанию равную 53.

NewFloat выделяет и возвращает новый Float, установленный в x, с точностью 53 и режимом округления ToNearestEven. NewFloat паникует с ErrNaN, если x является NaN.

Если вы хотите установить значения с более высокой точностью, вы можете установить точность напрямую, или вы можете начать с точности 0, используя нулевое значение big.Float, которое определяет требуемую точность при первом задании значения.

f1, _, _ := new(big.Float).SetPrec(128).SetMode(big.ToNearestEven).Parse("3891113451447590234", 10)
// equivalent to
// big.ParseFloat("3891113451447590234", 10, 128, big.ToZero)
fmt.Println(f1)
// 3.891113451447590234e+18

i, _ = new(big.Int).SetString("3891113451447590234", 10)
f2 = new(big.Float).SetInt(i)
fmt.Println(f2)
// 3.891113451447590234e+18
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...