2013-03-17 42 views
0

我有以下字符串「0x4B196DAF」。我想獲得像「10055087.000000」的輸出。在java中的32位十六進制字符串到浮點數

我的代碼片顯示像一個奇怪的輸出 「1.0055087E7

long l = Long.parseLong(hexval, 16); 
return Float.intBitsToFloat(l.intValue()); 

我也試圖與

long l = Long.parseLong(hexval, 16); 
return Double.longBitsToDouble(l.longValue()); 

但沒有什麼幫助。我檢查了幾個顯示正確輸出的網站。我無法確切地發現問題。

+0

也許看看http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html – SpaceCowboy 2013-03-17 18:39:37

+2

1.0055087E7只是10055087.000000的另一種表示法。你想看看java的格式化選項來打印數字。 http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html可能會有用。 – Lalaland 2013-03-17 18:41:41

回答

3

我假設你想打印出來作爲一個字符串,調用某處toString()。它會在達到限制後給出科學記數法。

你可以嘗試使用:

int hex = 0x4B196DAF; 
float f = Float.intBitsToFloat(hex); 
System.out.println(f); 
System.out.printf("%f", f); 

輸出....

1.0055087E7 
10055087.00000010055087 

,或者如果你願意,你可以嘗試使用NumberFormat的,這將允許您設置一個最低分位數:

NumberFormat nf = NumberFormat.getInstance(); 
nf.setGroupingUsed(false); 
nf.setMinimumFractionDigits(6); 

System.out.println(nf.format(f)); 

輸出....

10055087.000000 

我希望這會有所幫助。

+0

正是我正在尋求....謝謝 – 2013-03-17 20:22:41

相關問題