Hey there…
Why below code works;
x := 111.120
fmt.Println(int(x))
And below one not;
fmt.Println(int(111.120))
Tnx.
Hey there…
Why below code works;
x := 111.120
fmt.Println(int(x))
And below one not;
fmt.Println(int(111.120))
Tnx.
This is due to how Go handles constants. There is a good blog post about that here: https://blog.golang.org/constants
Your function call
fmt.Println(int(111.120))
is essentially equivalent to
const c0 = 111.12 // floating point constant
const c1 = int(c0) // attempted conversion to integer constant
fmt.Println(c1)
But you can’t convert a floating point constant to an integer constant. You can however convert a float64
variable to int
, which is what you’re doing in the first example.
Go constants are unusual in that they live in a hypothetical infinite precision mathematical space, as opposed to the practical limited-by-a-certain-number-of-bits world that variables live in. For example:
const c0 = 112.12e3 // actually an integer constant
const c1 = int(c0) // fine
fmt.Println(c1) // "112120"
but also
const c0 = 112.12e100 // a larger integer constant
const c1 = int(c0) // constant 11212000...000 overflows int
and
const c0 = 112.12e100
const c1 = c0 / 1e98 // integer constant, value 11212
const c2 = c0 / 1e99 // floating point constant, value 1121.2
fmt.Println(c1, c2) // "11212 1121.2"
Of course It makes Sense, I just need tô truncate It to 111, int() method did it. Tnx.
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.