ホームページ > バックエンド開発 > Golang > Go の整数の除算の結果が浮動小数点数ではなく 0 になるのはなぜですか?

Go の整数の除算の結果が浮動小数点数ではなく 0 になるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-14 16:37:11
オリジナル
750 人が閲覧しました

Why Does Go's Division of Integers Result in 0 Instead of a Floating-Point Number?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート