ドルはどこへ行きますか?フロートの背後にある物語--java

そのようなパズルがあります:3人がホテルに滞在、彼らが行って、妻が今日は特別な25元、3人の顧客バックと呼ばれる男を取るために5元で思い出した後、彼女の30元を支払うことを言った、男は$ 2にする隠し彼らの$ 3、のようにそれらのそれぞれが、それは一人につき9元を支払った、とされる$ 1だったことその3 *が29元、1元Qulaに等しい9 = 27、プラス$ 2チベット人、?

多くの人が最終的にドルの残りの部分がなくなっていることを、非常に長い時間を疑いますか?私たちは役割を分析します:

ボス:実際には、25元を取得します

マン:テイク2を元

お客様:3 * 9 = 27の費用を支払います

27 = 25の+ 2費用と便益がバランスしています。上記は、主に混乱ロジックです。

しかし、Javaの開発で、あなたのお金が誤ってああ、それを見て失われる可能性があります!

ドルはどこへ行きますか? フロートの背後にある物語--java

 

パブリッククラスTestFloatDouble { 
パブリック静的無効メイン(文字列[] args){
するSystem.out.println(0.05f + 0.01f)。
System.out.println(1.0F-0.42f)。
System.out.println(4.015d * 100);
System.out.println(123.3d / 100)。
}
}

賞品があり、対話を推測!

0.060000002 
0.58000004
401.49999999999994
1.2329999999999999

我々は、浮動小数点型floatまたは二重計算を使用する場合、データが歪むことができることを見出しました。それが理由である上記?

私たちは、コンピュータがバイナリデータ以外のデータを認識しないことを知っています。どんなに私たちが動作するように下のプログラミング言語、コンパイラ環境を使用しているものの後に、コンピュータで認識させるために、我々は最初のバイナリマシンコードにソースコードを変換する必要があります。上記の場合には、例えば、我々は確認する必要が

パブリッククラスTestFloatDouble { 
パブリック静的無効メイン(文字列[] args){
System.out.printlnは(Float.toHexString(0.05f))。
System.out.println(Float.toHexString(0.01f))。
System.out.println(Float.toHexString(1.0F))。
System.out.println(Float.toHexString(0.42f))。

System.out.println(Double.toHexString(4.015d))。
System.out.println(Double.toHexString(123.3d))。

System.out.println(0.05f + 0.01f)。
System.out.println(1.0F-0.42f)。
System.out.println(4.015d * 100);
System.out.println(123.3d / 100)。
}
}

その結果:

0x1.47ae14p-7 
0x1.0p0
0x1.ae147ap-2
0x1.00f5c28f5c28fp2
0x1.ed33333333333p6
0.060000002
0.58000004
401.49999999999994
1.2329999999999999

:牛進

pは、ベース2のインデックスを表し、

理解することは難しいことではありません。

ドルはどこへ行きますか? フロートの背後にある物語--java

 

必要に応じて、短い、正確な答えでは、floatとdoubleの使用を避けるために、通貨のために、int型、長いまたはBigDecimalを使用します。

参考文献:

【1】https://blog.csdn.net/aya19880214/article/details/45891581

おすすめ

転載: www.cnblogs.com/davidwang456/p/11442177.html