15

2e15一目で「2,000 兆」と簡単に読めます2000000000000000が、ゼロを数える必要があるため、時間がかかり、エラーが発生する可能性があります。

orなどのリテラルを使用してintorを宣言できないのはなぜですか? のような 10 の負の累乗、または のような小数点以下の桁数よりも小さい 10 の累乗が浮動小数点数を生成することは理解していますが、なぜ Java はそのような宣言を許可せず、単に切り捨てますか?結果の値が整数でない場合に軽度の警告を発行しますか?long2e91.3e62e-31.0003e3

これが悪い考えである技術的な理由はありますか、それともこれはすべて型安全性に関するものですか? コンパイラが次のようなステートメントを単純に解析するのは簡単ではないでしょうか

long x = 2e12なのでlong x = 2000000000000 //OK for long

そしてint y = 2.1234e3_int y = 2123.4 //warning: loss of precision

4

3 に答える 3

19

これは、科学表記法を使用すると、浮動小数点数(この例では double) が作成されるためです。また、浮動小数点を整数に割り当てることはできません (これは、有効な代入変換ではない縮小プリミティブ変換になります)。

したがって、これは次のようにも機能しません。

int y = 2d; //can't convert double to int

いくつかのオプションがあります:

  • 浮動小数点を整数に明示的にキャストします。 int y = (int) 2e6;
  • Java 7+ では千区切り記号を使用します。int y = 2_000_000;
于 2013-07-14T05:22:26.147 に答える
1

整数リテラルの記述規則について質問しています。次のリファレンスを参照してください: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 科学表記法を整数リテラルとして使用する機能により、実際には作業が容易になる可能性がありますが、実装されていません。このような機能の実装を妨げる技術的な理由は見当たりません。

于 2013-07-14T05:31:35.013 に答える