簡體   English   中英

如何在Java中將雙精度值映射到浮點型?

[英]How to Map a double value to a float one In Java?

乍一看,我的問題似乎有些奇怪。 但是將double轉換為float值不是我想要的。 因為當您進行轉換時,相對於IEEE-754所定義的規則,您只是失去了一些精度,並且無法實現雙精度值到float范圍的實際映射。 這是沒有用的。 以下表達式有效,但是當您輸入大量內容時,它非常昂貴:

float mappedVal = (float)((val * MAX_FLOAT_VALUE + 1) / MAX_DOUBLE_VALUE);

我可以通過某種按位運算將結果近似於上述“ mappedVal”,以加快相同的計算速度嗎?

我不確定您要達到的目標,因為某些double值遠遠超出float的范圍。

但是,如果您願意冒失去太大而無法浮動的價值的風險,請嘗試以下操作:

float f = new Double(val).floatValue();

編輯:這與強制浮動完全相同。 :)

這會將雙精度值映射到具有相同的最高32位的float中:

float mappedVal = Float.intBitsToFloat((int)(Double.doubleToLongBits(val)>>32));

但是,此運算的算術解釋有些復雜,部分指數已映射到尾數...

暫無
暫無

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

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