Просто приведение к int усекает число с плавающей точкой, которое, если ваша система внутренне представляет 2.0 как 1.9999999999, вы не получите того, что ожидаете. Различные преобразования printf имеют дело с этим и правильно округляют число при преобразовании. Поэтому, чтобы получить более точное значение, преобразование еще сложнее, чем вы могли бы сначала ожидать:
package main
import (
"fmt"
"strconv"
)
func main() {
floats := []float64{1.9999, 2.0001, 2.0}
for _, f := range floats {
t := int(f)
s := fmt.Sprintf("%.0f", f)
if i, err := strconv.Atoi(s); err == nil {
fmt.Println(f, t, i)
} else {
fmt.Println(f, t, err)
}
}
}
Код на Игровая площадка Go