簡體   English   中英

Java中的浮點轉換

[英]Floating Point Casting in Java

整數轉換非常簡單,多余的位就消失了。

但是,重要的是要了解在進行浮點運算的幕后到底發生了什么? 我試圖閱讀有關如何計算浮點數的信息,但是我還沒有找到一個能很好解釋這一點的信息。 至少那是我的借口。 盡管尾數的計算有些困難,但是我得到了基本的想法。

至少在Java 7之前,我知道不能在按位運算中使用浮點。 這是有道理的,因為它們是如何在內部存儲的。 是否需要了解浮點如何工作或強制轉換的任何重要信息?

因此,總結一下:

了解浮點數(如整數)的內部工作原理是否重要?

將浮點數轉換為整數的內部過程是什么?

將浮點數轉換為整數的內部過程是什么?

Java調用符合IEEE-754標准的機器代碼指令。 Java並沒有做任何事情。 如果您想知道鑄造的工作方式,建議您閱讀標准。

基本上,尾數會隨着指數和所施加的符號而移動。 也就是說,浮點數是符號* 2 ^指數*尾數,它所做的只是執行此計算,然后計算掉和小數部分。

首先,您需要了解浮點數本質上是一個近似值。 您可以輸入1.23,然后輸入1.229998(或類似的值),因為精確地表示了1.23。 不管您是否要進行任何強制轉換,都需要了解這一點,以及它如何影響計算(尤其是比較)。

從強制轉換的角度來看,將float轉換為double float不會造成信息丟失,因為double float可以包含float可以包含的每個值。 但是,從double精度float轉換為float會導致精度損失(對於很大或很小的數字,都會導致指數上溢/下溢),因為64位值中的信息僅比32位值中的信息多,因此某些數據在不斷增加。最終“落在地板上”。

同樣,從int轉換為double不會導致信息丟失,因為double可以包含int可以包含的每個值,然后包含一些值。 但是從intfloat或從longdoublefloat可能會導致精度損失(盡管永遠不會出現指數上溢/下溢)。

如果floatdouble值具有大的正指數或任何負的指數,則從floatdoubleintlong會很容易導致上溢/下溢和大量數據丟失。 而且,當然,當您從浮點數轉換為固定數時,數字的小數部分會被截斷(本質上是“ floor”運算)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM