В Go есть возможность выполнить округление вещественного числа до целочисленного значения или до указанной точности округления. Частой ошибкой является конвертирование вещественного типа float64
в целочисленный тип Integer
.
К примеру, при конвертировании float-числа 3.9999 в тип integer
его значение не округлится до 4. В результате получится 3. В версии Go (1.9.2) нет функции Round
. Однако, начиная с версии 1.10 функция Round
была добавлена в пакет math
.
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
Как округлить число float в Go?
1. Создайте файл round.go
со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package main import ( "fmt" "math" ) var valA float64 = 3.55554444 func main() { // Плохой способ округления это // конвертирование float сразу в integer intVal := int(valA) fmt.Printf("Плохое округление через конвертирование float в int: %v\n", intVal) fRound := Round(valA) fmt.Printf("Округление через функцию math.Round: %v\n", fRound) } // Round возвращает ближайшее целочисленное значение. func Round(x float64) float64 { t := math.Trunc(x) if math.Abs(x-t) >= 0.5 { return t + math.Copysign(1, x) } return t } |
2. Запустите код в терминале через go run round.go
;
3. Посмотрите на вывод:
1 2 |
Плохое округление через конвертирование float в int: 3 Округление через функцию math.Round: 4 |
На деле в результате конвертирования типа float
в integer
дробная часть просто обрезается. Предположим, значение 2 представлено как 1.999999. Таким образом, выводом станет 1, чего нам не нужно.
Правильным способом округления вещественного числа будет использование функции, что также учитывает десятичную часть. Популярным методом округления является округление к ближайшему целому числу, также известное как коммерческое округление. Если десятичная часть числа равна или превышает 0.5, тогда число округляется вверх. В противном случае округление производится вниз.
В версии Go 1.10 используется более быстрая версия функции, что упоминалась в нашем примере. В версии 1.10 для получения округленного числа можно вызвать функцию math.Round
.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»