Почему этот код не компилируется?
const n = 9876543210 * 9876543210
fmt.Println(n)
../main.go:2:13: constant 97546105778997104100 overflows int
Ответ
Нетипизированная константа n должна быть преобразована в тип, прежде чем ее можно будет присвоить параметру interface{} в вызове fmt.Println.
fmt.Println(a ...interface{})
Когда тип не может быть выведен из контекста, нетипизированная константа преобразуется в bool, int, float64, complex128, string или rune в зависимости от формата константы.
В этом случае константа является целым числом, но n больше максимального значения типа int.
Тем не менее, n может быть представлен как float64.
const n = 9876543210 * 9876543210
fmt.Println(float64(n))
9.75461057789971e+19
Для точного представления больших чисел пакет math/big реализует арифметику произвольной точности (длинная арифметика). Он поддерживает целые числа со знаком, рациональные числа и числа с плавающей точкой.
Читайте также:
- Выбрать правильный тип: int против int64
- Преобразования между int, int64 и string в Golang
- Константы в Golang
Комментариев нет:
Отправить комментарий