エラーになるコード
このコードを実行するとエラーになりますが何故でしょうか?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package main import ( "fmt" ) func main() { a := 1000 b := 1.08 c := a * b fmt.Println("a + b = ", c) } |
それは、11行目で型の違う a と b を掛け算しているからです。
a には 1000 を代入しているので、暗黙的に int 型(小数点のない数値)になり、b には 1.08 という小数が代入されているので暗黙的に float64型になります。
念のために型を調べてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import ( "fmt" ) func main() { a := 1000 b := 1.08 fmt.Printf("%Tと%T\n", a, b) //intとfloat64 } |
Printfと%Tについては前回の記事を参考にして下さい。
型変換
エラーにならないように、型変換してから計算してみます。
int を float64 にするために、10行目で float64(a) としています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package main import ( "fmt" ) func main() { a := 1000 b := 1.08 c := float64(a) * b fmt.Println("a * b =", c) //a + b = 1080 fmt.Printf("%T\n", c) //float64 } |
今回intをfloat64にしましたが、その逆はint(float64の数値)とすれば、小数点を切り捨てたint型の数値が得られます。
1 2 3 4 5 6 7 8 9 10 11 |
package main import ( "fmt" ) func main() { a := 3.95 b := int(a) fmt.Println(b) //3 } |