整数の除算: 1/3 == 0 の背後にある真実を明らかにする
Java の整数除算は、特に次の場合に複雑な概念になることがあります。 10 進数値が含まれます。ここでの問題は、1 / 3 の結果が 0.333 であると予想しているにもかかわらず、なぜ 0 に等しいのかということです...
算術の公開
この特定の場合この場合、両方のオペランド (1 と 3) が整数であるため、デフォルトで整数演算が使用されます。結果変数 (g) を double として宣言しているにもかかわらず、除算の後に暗黙の変換が発生します。
整数除算の複雑さ
浮動小数点数とは対照的に、整数除算 -点除算では、結果がゼロに向かって丸められます。したがって、除算の真の結果 0.333... は 0 に切り捨てられます。プロセッサは基本的に、小数部分が存在しないかのように処理します。
浮動小数点演算: 別の話
両方のオペランドが浮動小数点数 (3.0 および 1.0) として指定された場合、浮動小数点演算が優先されます。この結果、期待される小数値は 0.333 になります。最初のオペランドのみが浮動小数点 (3.0 と 1 など) である場合でも、浮動小数点演算が引き続き使用されることに注意してください。
実用的解決策
10 進数の結果を取得するには、浮動小数点除算を明示的に実行する必要があります。これは、両方のオペランドを double または float にキャストすることで実現できます。
public static void main(String[] args) { double g = (double) 1 / 3; // Explicitly cast to double System.out.printf("%.2f", g); }
あるいは、BigDecimal クラスを使用して、より正確な数値演算を行うこともできます。
以上がJava 整数除算で 1 / 3 が 0 に等しいのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。