web-dev-qa-db-ja.com

なぜfがfloat値の後に配置されるのですか?

たとえば、Javaまたは他の言語?

float fVariable = 12.3f;

これが浮動小数点値であることを示す以外の機能はありますか?

67
ipkiss

デフォルトでは12.3doubleリテラルです。したがって、コンパイラーにfloatとして明示的に扱うように指示するために->それはfまたはFを使用します

57
Jigar Joshi

プログラムで数値を表現する方法は非常に多くあるため、Javaの設計者は各フォームを選択して最も一般的なユースケースに割り当てる必要がありました。デフォルトとして選択されたフォームについては、正確なタイプを示すsuffixはオプションです。

  • 整数リテラル(int、long)の場合、デフォルトはintです。明らかな理由のため。
  • 浮動小数点リテラル(float、double)の場合、デフォルトはdoubleです。 doubleを使用すると、保存された値のsafer演算が潜在的に許可されるためです。

したがって、プログラムで12と入力すると、intリテラルであり、12Llong12.3と入力すると、doubleリテラルであるのに対し、12.3Ffloat

では、これはどこに関連していますか?主にダウンキャストの処理、またはコンバージョンの絞り込み。 longをintに、またはdoubleをfloatにダウンキャストするたびに、データが失われる可能性があります。そのため、コンパイラは、reallyのコンパイルエラーを通知することにより、ナローイング変換を実行することを示すように強制します。このようなもの:

float f = 12.3;

12.3はdoubleを表すため、明示的にfloatにキャストする必要があります(基本的に、縮小変換でサインオフします)。それ以外の場合は、正しいサフィックスを使用して、数値が実際に浮動小数点数であることを示すことができます。

float f = 12.3f;

要約すると、longsおよびfloatsのサフィックスを指定する必要があります数値を正確に指定する必要性と、あるストレージタイプから別のストレージタイプに数値を変換する柔軟性とのバランスをとるために、言語設計者が選択した妥協案。

48
Perception

floatおよびdoubleは、一部の値の近似表現値のみを提供できます。例えば12.3または0.1

違いは、floatはそれほど正確ではないことです(より小さいため、精度が低くなります)

例えば.

System.out.println("0.1f == 0.1 is " + (0.1f == 0.1));
System.out.println("0.1f is actually " + new BigDecimal(0.1f));
System.out.println("0.1 is actually " + new BigDecimal(0.1));

プリント

0.1f == 0.1 is false
0.1f is actually 0.100000001490116119384765625
0.1 is actually 0.1000000000000000055511151231257827021181583404541015625

したがって、0.1doubleの最も近い表現であり、0.1ffloatの最も近い表現です

25
Peter Lawrey

float fVariable = 12.3;結構です。ただし、その式で浮動小数点値(識別子なし)のみを使用する場合は、コンパイラーに値が浮動小数点数であることを伝える必要があるため、値の後にサフィックス "f"を使用します。例

float fl = 13f/5f;

ここで13と5は浮動小数点値です。

4
kundan bora

Javaには多くの異なる基本変数タイプがあるため、一般的にするためにいくつかのデフォルト機能があります。入力16.02を与える場合、自動的に二重入力として受け取ります。浮動小数点数として指定する場合は、数値の後に'f'を指定するか、単に使用できます:

float f = (float) 16.02;

または

float f = 16.02f;

同様に、16 lを指定する必要があります。数値をlong型として保存する場合は、自動的にデフォルトの型(int型)を選択します。

1
Geetika Agarwal

コンパイル中、すべての浮動小数点数(小数点付きの数値)はデフォルトで2倍になります。

したがって、数値を2倍にせず、単に浮動小数点数にしたい場合は、fまたは[〜#〜] f [〜 #〜]リテラル定数の末尾。

1
Confuse

Floatは単精度の32ビットIEEE 754浮動小数点であり、Doubleは倍精度の64ビットIEEE 754浮動小数点です。小数点付きの値を使用し、指定しない場合は、0.23f(具体的にはfloat)Javaはdoubleとして識別します。

10進値の場合、通常、Javaはdoubleデータ型をデフォルトの選択にします。 これをチェック

0
User123456