2013-03-17 40 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

相关问题