7

可能重复:
java Float.parseFloat 中的舍入

我想将字符串转换为浮点数我说:

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

输出:

1553782.0

我说:

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

输出:

1553782.0

如何在不损失精度的情况下获得浮点数?

4

4 回答 4

7

System.out.println(Double.parseDouble("1553781.9829"));改为使用

float 有较小的大小(4 字节)的限制,因此它不适合大小数,double 具有双倍大小(8 字节)

于 2012-12-26T07:09:59.010 回答
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

于 2012-12-26T07:12:24.240 回答
1

您不能使用 float 或 double 而不会有丢失精度的风险。首先,它们的精度是有限的,对于浮点数,它大约是 7-8 位十进制数字,对于双 ~16 位数字。除此之外,Java 浮点类型在内部是二进制的,因此它们不能在不丢失精度的情况下存储一些小数。如果您确实需要精确的小数部分,请使用 java.math.BigDecimal。阅读“Effective Java”第 48 条:“如果需要准确答案,请避免使用 float 和 double”。

于 2012-12-26T07:16:07.293 回答
0

而不是Float你可以使用Double

System.out.println(Double.valueOf("1553781.9829"));
System.out.println(Double.parseDouble("1553781.9829"));
于 2012-12-26T07:20:54.190 回答