Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс Golang
/

Математика и числа

Golang: Математика и числа

В Go существует множество числовых типов:

  • uint, uint8, uint16, uint32, uint64
  • int, int8, int16, int32, int64
  • float32, float64
  • complex64, 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 uint

Go не позволяет преобразовать значение, если оно может привести к потере данных на этапе компиляции.

Задание

Реализуйте функцию 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
Коммерческий опыт и Трудоустройство

Полезное

  • The Go Programming Language Specification - Numeric Types

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
/
Программирование
/
Курс Golang
/

Математика и числа

Golang: Математика и числа

В Go существует множество числовых типов:

  • uint, uint8, uint16, uint32, uint64
  • int, int8, int16, int32, int64
  • float32, float64
  • complex64, 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 uint

Go не позволяет преобразовать значение, если оно может привести к потере данных на этапе компиляции.

Задание

Реализуйте функцию 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
Коммерческий опыт и Трудоустройство

Полезное

  • The Go Programming Language Specification - Numeric Types

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
← ПредыдущийСледующий →
← ПредыдущийСледующий →
← ПредыдущийСледующий →

Ваше упражнение проверяется по этим тестам

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

waiting_clock
← ПредыдущийСледующий →