Understanding Division in Go
Unlike other programming languages that automatically perform floating-point division, Go requires explicit conversion to floating-point for division operations. This can lead to unexpected results when working with integers.
Consider the following code:
fmt.Println(3 / 10)
This will output 0 instead of the expected 0.3. The reason is that the operands, 3 and 10, are both untyped integer constants. According to the Go language specification, if the operands of a binary operation are different kinds of untyped constants, the operation and the result use the type that appears later in the list: integer, rune, floating-point, complex. In this case, integer appears before floating-point, so the result is an untyped integer (0).
To obtain a floating-point result, one of the operands must be a floating-point constant. Consider the following:
fmt.Println(3.0 / 10.0) fmt.Println(3.0 / 10) fmt.Println(3 / 10.0)
All these expressions will evaluate to the untyped floating-point constant 0.3. By adding a .0 to either operand, we explicitly convert it to a floating-point, resulting in a floating-point result.
When the division operation involves a typed operand, the type of the typed operand determines the type of the expression. To ensure a float64 result, the typed operand should be float64. For instance:
var i3 = 3 var i10 = 10 fmt.Println(float64(i3) / 10) fmt.Println(3 / float64(i10))
These expressions will convert the int variables to float64, resulting in a float64 result of 0.3.
It's important to note that numeric literals like 10.0 and 3.0 are untyped floating-point constants, not float64. Expressions like i3 / 10.0 and 3.0 / i10 will still result in an integer 0 because the typed operand (i3 and i10) determines the type of the result.
The above is the detailed content of How Does Go Handle Integer Division, and How Can I Ensure Floating-Point Results?. For more information, please follow other related articles on the PHP Chinese website!