TGViewer
Golang вопросы собеседований Golang вопросы собеседований @golang_interview · 15.1K subscribers
Post #1550 4.28K
Go-приём: как не получить 99% после округления

При независимом округлении процентов итоговая сумма может перестать быть равной 100.


33.3 → 33
33.3 → 33
33.4 → 33

Итого: 99%


Для простого интерфейса можно округлить первые значения, а последнему передать остаток:


package main

import "math"

func balancePercentages(values []float64) []int {
if len(values) == 0 {
return nil
}

result := make([]int, len(values))
used := 0

for i := 0; i < len(values)-1; i++ {
result[i] = int(math.Round(values[i]))
used += result[i]
}

result[len(values)-1] = 100 - used

return result
}


Результат:


[]int{33, 33, 34}


Сумма останется равной 100.

Но это быстрый приём, а не универсальный алгоритм:

- значения должны быть заранее нормализованы;
- вся погрешность достаётся последнему элементу;
- результат зависит от порядка;
- при некорректных данных последнее значение может стать отрицательным.

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

Код актуален для современной Go 1.26 и работает без изменений. Функция math.Round доступна начиная с Go 1.10.
  • ❤ 6
  • 🔥 5
  • 👍 2
More from @golang_interview
  1. Sep 19, 2026🐹 golang-set - готовые множества для Go с поддержкой дженериков Библиотека для работы с к…
  2. Sep 15, 2026Apache Kafka курс 2026: бесплатный курс по Kafka с нуля до профи на русском Kafka обучение…
  3. Sep 13, 2026🔥 AI-кодинг в Go - не главная проблема. Проблема начинается, когда код никто нормально не…
  4. Sep 13, 2026🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночку Можно годами смотреть…
  5. Sep 11, 2026🐹 Go: `defer f.Close()` может скрыть ошибку записи При работе с bufio.Writer данные снача…
  6. Sep 11, 2026⚡️ DeepSeek открыла веса V4.1-Flash DeepSeek выложила свежайшую DeepSeek-V4.1-Flash, мульт…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →