Когда bitSize равен 32, результат все еще имеет тип float64, но он будет преобразован в float32 без изменения его значения.
f := "3.14159265"
if s, err := strconv.ParseFloat(f, 32); err == nil {
fmt.Println(s) // 3.1415927410125732
}
if s, err := strconv.ParseFloat(f, 64); err == nil {
fmt.Println(s) // 3.14159265
}
Просто приведение к int усекает float, который, если ваша система внутренне представляет 2.0 как 1.9999999999, вы не получите то, что ожидаете. Различные преобразования printf имеют дело с этим и правильно округляют число при преобразовании. Таким образом, чтобы получить более точное значение, преобразование еще сложнее, чем вы могли бы сначала ожидать: