Вы можете добавить 0.5
к нему перед вызовом Float.Int()
, и вы получите то, что хотите.
По крайней мере, для положительных чисел. Если число отрицательное, вы должны добавить -0.5
, например, -0.6
округляется до -1.0
.
Вот как вы можете это сделать:
delta := 0.5
if bf.Sign() < 0 {
delta = -0.5
}
bf.Add(bf, new(big.Float).SetFloat64(delta))
bint, _ := bf.Int(nil)
Вы можете упростить это дополнение следующим образом, если хотите:
bf.Add(bf, new(big.Float).SetFloat64(0.5*float64(bf.Sign())))
Давайте проверим его на некоторые значения:
for _, s := range []string{"-0.8", "-0.3", "0.6", "1.1", "1.8"} {
bf, _ := (&big.Float{}).SetString(s)
delta := 0.5
if bf.Sign() < 0 {
delta = -0.5
}
bf.Add(bf, new(big.Float).SetFloat64(delta))
bint, _ := bf.Int(nil)
fmt.Printf("%5s => %2s\n", s, bint)
}
Вывод (попробуйте на игровой площадке Go ):
-0.8 => -1
-0.3 => 0
0.6 => 1
1.1 => 1
1.8 => 2