The reason for the different output is that in the first case 912 * 0.01
is the multiplication of 2 untyped constant values which is of arbitrary precision, and only the result is converted to float64
when the value is passed to Println()
. (See Constant expressions section of the Language specification for details.)
In the second case float64(912) * 0.01
first 912
is converted to float64
, then the untyped constant 0.01
is converted to float64
and these two values having float64
are multiplied which is not an arbitrary precision, and will not give exact result.
Note:
In the first case the result will be converted to float64
when passed to the Println()
:
fmt.Printf("%T %v\n", 912 * 0.01, 912 * 0.01)
Output:
float64 9.12
Test it on Go Playground