2015-06-18 27 views
-2

我想解析字符串来浮动,但它给了我一些不同的输出。 假设我的代码:浮点到字符串转换输出不同

String a = "111111111111111111111.23"; 
Float f = Float.parseFloat(a); 
System.out.println(f); 

它给了我这样的:1.1111111E20

以简单的方式,它给了我111111110000000000000

我如何显示的所有数据?我不想截断输入数据。

+0

http://stackoverflow.com/questions/703396/how-to-nicely-format-floating-numbers-to- string-without-unnecessary-decimal-0 – Reg

+0

使用Double或BigDecimal取而代之,float具有较小大小的限制(4字节 – Hiru

+2

提示:请使用计算机系统更多地了解数字的表示形式。就像“代表数据一样”......你应该明白**这意味着什么。因为你不是新手:在发布问题之前,你为什么不做前期研究? – GhostCat

回答

6

如何获取整个数据。不想截断输入数据。

然后无论你做什么,都不要使用float。在至少使用double,但即使double将与该值作为IEEE-754双精度浮点数斗争在基座10中表达时对于大于精度,看BigDecimal仅精确到大致 15位数字。

+0

'BigDecimal'是否支持浮动? –

+0

@ user3145373ツ:'BigDecimal'支持浮点运算,如果这就是你的意思。 –

+0

@ user3145373ツ你可以在这里检查:[JavaDoc](https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html) – Tom

2

BigDecimal从不自动舍入或失去精确度,因此它在计算中非常受欢迎。

A float是以32位表示的十进制数值类型。

A double是一个64位十进制数,因此它可以表示比浮点​​数大的值。

可以使用BigDecimal

public static void main(String[] args) { 
     String a = "111111111111111111111.23"; 
     BigDecimal f = new BigDecimal(a); 
     System.out.println(f); 
    } 

输出

111111111111111111111.23 
+0

我试过'BigDecimal m = new BigDecimal(a);',它给了我'111111111111111110000'。是否预计? –

+0

@ user3145373ツ发布您的代码与输出 –

+0

@ user3145373ツ否,不是预期的。你试过了吗?*正如这里所显示的那样?使用您使用的代码以及输入和结果更新您的问题。 –