java中将int转换float_在java中将float和double转换为int时有什么区别?
我用這些語句來測試
float f=4.35f;
int i=(int)(f*100);
System.out.println(i);
double d=4.35;
i=(int)(d*100);
System.out.println(i);
結果是
435
434
我曾經認為float和double之間的唯一區別就在于精度.它們在計算中應該相同.但我將4.35轉換為二進制,然后將其轉換回十進制,發現它實際上是4.3499999 ……
因此,如果我將它乘以100然后再進行投射,我認為答案應該是434,浮動和雙重.為什么第一個是435?
解決方法:
Java中的浮點使用二進制表示.許多具有十進制精確表示的數字,例如4.35,在任何精度上都不具有二進制的精確表示(無論是浮點數,雙精度數還是其他精度).
當您在Java程序中編寫4.35時,它被解釋為意味著最接近的435/100.當你寫4.35f時,它被解釋為最接近435/100的浮點數.
碰巧4.35和4.35f都略低于435/100:
在Java中,4.35表示4.3499999999999996447286321199499070644378662109375,4.35f表示4.349999904632568359375.
在第一個近似中,兩種類型中最接近的可表示值低于目標435/100的可能性很大(盡管在深入研究它時,沒有任何隨機性).
另一方面,數字435可以表示為浮點數和雙精度數.
當將4.35f或4.35乘以100(這可以精確地表示為float和double也是如此)時,會發生以下兩種可能性之一:
>乘法的數學結果比任何其他浮點數更接近435.然后選擇435作為操作的結果.你必須記住,Java并不知道它正在乘以4.35的數字.據他所知,你故意選擇低于4.35的數字.也許你真的打算將操作數設置為4.349999904632568359375.這是乘法過程中第二次近似的結果,最終結果是435.無論如何,將浮點數435轉換為int會產生int 435.這就是浮點數時發生的情況.
>乘法的數學結果最接近435以下的浮點數.在這種情況下,選擇浮點數作為浮點乘法的結果.將此結果轉換為int會產生434,因為從浮點到整數的轉換通過截斷來實現.這是雙重情況下發生的情況.乘以4.3499999999999996447286321199499070644378662109375乘以產生的數學結果接近于緊接在435.0以下的雙精度(此雙精度為434.99999999999994315658113919198513031005859375),因此該雙精度值用作浮點乘法的結果.
標簽:java
來源: https://codeday.me/bug/20190528/1173713.html
總結
以上是生活随笔為你收集整理的java中将int转换float_在java中将float和double转换为int时有什么区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java最全人名数组_java 里有两个
- 下一篇: 办一张新的移动的电话卡多少钱?