Golang: Математика и числа
В Go существует множество числовых типов:
uint,uint8,uint16,uint32,uint64int,int8,int16,int32,int64float32,float64complex64,complex128
Это связано с тем, что Go — кроссплатформенный язык. Один и тот же код компилируется под разные архитектуры — 32-битные и 64-битные. Поэтому язык предлагает как архитектурно-независимые типы (int, uint), так и строго фиксированные (int32, uint64 и другие).
Практически используемые типы
В повседневной разработке чаще всего используются три типа:
int— основной тип целых чисел. Может быть отрицательным. Разрядность зависит от архитектуры (32 или 64 бита).int64— используется, когда требуется явно задать размер. Например, при работе сbigintиз баз данных.float64— число с плавающей точкой двойной точности. Применяется в математических операциях и финансовых расчётах.
Арифметические операции
В Go поддерживаются базовые арифметические операции:
x := 10
y := 5
x + y // 15
x - y // 5
x * y // 50
x / y // 2Операции возможны только между значениями одного и того же типа. Неявное приведение типов не выполняется. Пример ошибки:
x := 5.05
y := 10
x + y // ошибка: mismatched types float64 and intДля выполнения операции нужно привести типы вручную:
x + float64(y) // 15.05Сокращённые операции присваивания
Go поддерживает сокращённые операции изменения значения переменной:
count := 10
count += 5 // count = 15
count -= 3 // count = 12
count *= 2 // count = 24
count /= 4 // count = 6Преобразования между типами
Конвертировать значения между числовыми типами можно, но с ограничениями:
f := 5.99
x := int64(f) // округляется вниз → 5
y := int64(5.05) // ошибка компиляции: constant 5.05 truncated to integer
z := uint(-5) // ошибка компиляции: constant -5 overflows uintGo не позволяет преобразовать значение, если оно может привести к потере данных на этапе компиляции.
Задание
Реализуйте функцию CalculateProgress(), которая вычисляет, какую часть из целого составляет текущее значение. Это может использоваться, например, для отображения процента выполнения задачи или прогресса загрузки.
Функция принимает два аргумента:
done— выполненное количество (int)total— общее количество (int)
Возвращается результат деления в виде float64.
Примеры
CalculateProgress(3, 4) // 0.75
CalculateProgress(2, 5) // 0.4
CalculateProgress(0, 10) // 0.0
CalculateProgress(5, 5) // 1.0Полезное
Ваше упражнение проверяется по этим тестам
package solution
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestCalculateProgress(t *testing.T) {
a := assert.New(t)
a.InDelta(0.0, CalculateProgress(0, 10), 0.0001)
a.InDelta(0.25, CalculateProgress(1, 4), 0.0001)
a.InDelta(0.4, CalculateProgress(2, 5), 0.0001)
a.InDelta(0.75, CalculateProgress(3, 4), 0.0001)
a.InDelta(1.0, CalculateProgress(5, 5), 0.0001)
}Решение учителя откроется через:
20:00
