在Java中将字符串转换为浮点数而不进行舍入

时间:2012-12-26 07:06:20

标签: java

  

可能重复:
  Rounding in java Float.parseFloat

我想将字符串转换为float我说:

System.out.println(Float.parseFloat("1553781.9829"));

输出:

1553782.0

我说:

System.out.println(Float.valueOf("1553781.9829"));

输出:

1553782.0

如何在不损失精度的情况下获得Float?

4 个答案:

答案 0 :(得分:7)

使用System.out.println(Double.parseDouble("1553781.9829"));代替

float有一个较小的限制(4个字节)所以它对大小数不好,double有双倍大小(8个字节)

答案 1 :(得分:5)

如果您正在寻找准确度,我建议 BigDecimal

这就像普通的包装类一样,它为您的所有操作提供方法。是的,它也将参数作为字符串。

  BigDecimal bd = new BigDecimal("1553781.9829");
  System.out.println(" bd :"+ bd);  //prints the same value

网址:http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html

答案 2 :(得分:1)

您不能使用float或double而不会有丢失精度的风险。首先,它们的精度是有限的,对于浮点数约为7-8位十进制数字,对于双倍~16位数。除了Java浮点类型在内部是二进制的,因此它们不能存储一些小数部分而不会丢失精度。如果你真的需要精确的小数部分,请使用java.math.BigDecimal。阅读“有效Java”第48项:“如果需要确切答案,请避免浮动并加倍”。

答案 3 :(得分:0)

您可以使用Float

代替Double
System.out.println(Double.valueOf("1553781.9829"));
System.out.println(Double.parseDouble("1553781.9829"));