golang float to int

Пользователь

Как правильно преобразовывать переменные типа float в переменные типа integer? Покажите пожалуйста на примере кода и расскажите, какие методы для этого существуют.

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket
19 июня 2020 г., 11:03

Пользователь

Используйте функцию strconv.ParseFloat для анализа строки как числа с плавающей запятой с точностью, указанной в bitSize: 32 для float32 или 64 для float64.

Для примера:

func ParseFloat(s string, bitSize int) (float64, error)


19 июня 2020 г., 11:12

Пользователь

Когда 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

}


19 июня 2020 г., 11:24

Пользователь

Спасибо за подробный пример. Теперь сам попробую в компиляторе своими пальчиками написать подобный код. Надеюсь, он запустится без ошибок.


19 июня 2020 г., 11:39

Пользователь

Посмотри на голанг орг статью о конвертировании типов данных в Golang. Там расписаны вообще все случаи, не только float в integer. Плюс есть советы, как в будущем не допускать глупых ошибок.


19 июня 2020 г., 11:48

Пользователь

Просто приведение к int усекает float, который, если ваша система внутренне представляет 2.0 как 1.9999999999, вы не получите то, что ожидаете. Различные преобразования printf имеют дело с этим и правильно округляют число при преобразовании. Таким образом, чтобы получить более точное значение, преобразование еще сложнее, чем вы могли бы сначала ожидать:

19 июня 2020 г., 11:58

Пользователь

Спасибо большое, ребят, попробовал многие методы из тех, которые вы скинули, и у меня всё получилось. Пойду дочитывать всё остальное и буду начинать писать свою небольшую, но очень интересную программку, в которой будут использоваться эти методы.


19 июня 2020 г., 12:20