web-dev-qa-db-ja.com

Goで除算を実行する方法

Goで簡単な除算を実行しようとしています。

fmt.Println(3/10)

これは0.3ではなく0を出力します。これはちょっと変です。誰かがこの背後にある理由を教えてください。 Goで異なる算術演算を実行したい。

ありがとう

65
Vrushank Doshi

3 / 10は、型なし定数式です。仕様 定数式についてこれを言う

バイナリ演算のオペランドが異なる種類の型なし定数である場合、演算および非ブール演算の場合、結果はこのリストの後半にある種類、整数、ルーン、浮動小数点、複素数を使用します。

3および10は型なし整数定数であるため、式の値は型なし整数です(この場合は0)。

オペランドの1つは、結果を浮動小数点定数にするための浮動小数点定数でなければなりません。次の式は、型なし浮動小数点定数0.3に評価されます。

3.0 / 10.0
3.0 / 10
3 / 10.0

型付き定数を使用することもできます。次の式は、float64定数0.3に評価されます。

float64(3) / float64(10)
float64(3) / 10
3 / float64(10)

上記の式のいずれかを印刷すると、0.3が印刷されます。たとえば、fmt.Println(3.0 / 10)0.3を出力します。

73
Cerise Limón

@ Cerise で述べたように、仕様ごとに

算術演算子は数値に適用され、第1オペランドと同じタイプの結果を返します。

この場合、最初のオペランドのみが浮動小数点である必要があります。

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3

12
robstarbuck