Go gotcha: Why can't I print large numbers? (constant overflows int)
Why doesn't this code compile?
const n = 9876543210 * 9876543210
fmt.Println(n)
../main.go:2:13: constant 97546105778997104100 overflows int
Answer
The untyped constant n
must be converted to a type before it can be assigned to the interface{}
parameter in the call to
fmt.Println(a ...interface{})
When the type can’t be inferred from the context, an untyped constant is converted to a bool
, int
, float64
, complex128
, string
or rune
depending of the format of the constant.
In this case the constant is an integer, but n
is larger than the maximum value of an int
.
However, n
can be represented as a float64
:
const n = 9876543210 * 9876543210
fmt.Println(float64(n))
9.75461057789971e+19
For exact representation of big numbers, the math/big package implements arbitrary-precision arithmetic. It supports signed integers, rational numbers and floating-point numbers.
Comments
Be the first to comment!