そのようなパズルがあります: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の開発で、あなたのお金が誤ってああ、それを見て失われる可能性があります!
パブリッククラス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のインデックスを表し、
理解することは難しいことではありません。
必要に応じて、短い、正確な答えでは、floatとdoubleの使用を避けるために、通貨のために、int型、長いまたはBigDecimalを使用します。
参考文献:
【1】https://blog.csdn.net/aya19880214/article/details/45891581