Go での浮動小数点除算
除算は一見単純であるにもかかわらず、Go でこの演算を実装すると予期しない結果が発生する可能性があります。提供された例に示すように:
fmt.Println(3/10)
このコード スニペットは、予想される "0.3" ではなく、驚くべきことに "0" を生成します。この動作を理解するには、Go の型システムの複雑さを詳しく調べることが重要です。
Go では、除算演算子のオペランドは型なしの定数です。これは、そのデータ型が明示的に指定されていないことを意味します。 Go の仕様によれば、型なし定数を使用した二項演算を処理する場合、結果のデータ型は関係する型の優先順位によって決まります。この場合、両方のオペランドが整数であるため、値が「0」の型指定されていない整数式になります。
浮動小数点定数の結果を取得するには、オペランドの 1 つを明示的に float として型指定する必要があります。これを示す例をいくつか示します。
3.0 / 10.0 3.0 / 10 3 / 10.0
これらの式では、浮動小数点定数 (例: "3.0") により、結果も値 "0.3" の浮動小数点定数になります。 ".
または、1 つのオペランドが型付き変数の場合、型付き変数のデータ型が優先されます。たとえば、次の式は整数変数を float64 値に変換し、「0.3」を生成します。
var i3 = 3 var i10 = 10 fmt.Println(float64(i3) / 10) fmt.Println(3 / float64(i10))
以上がGo の整数の除算の結果が浮動小数点数ではなく 0 になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。