可能是重复问题:
Java中的四舍五入 Float.parseFloat
我想把字符串转换成浮点数,我这么说:
System.out.println(Float.parseFloat("1553781.9829"));
输出:
1553782.0
我说:
System.out.println(Float.valueOf("1553781.9829"));
输出:
1553782.0
如何在不失精度的情况下获取浮点数?
可能是重复问题:
Java中的四舍五入 Float.parseFloat
我想把字符串转换成浮点数,我这么说:
System.out.println(Float.parseFloat("1553781.9829"));
输出:
1553782.0
System.out.println(Float.valueOf("1553781.9829"));
输出:
1553782.0
如何在不失精度的情况下获取浮点数?
使用 System.out.println(Double.parseDouble("1553781.9829"));
代替。
float 类型有大小的限制 (4 字节),所以不适用于大数位小数,double 类型则拥有双倍的大小 (8 字节)。
BigDecimal bd = new BigDecimal("1553781.9829");
System.out.println(" bd :"+ bd); //prints the same value
在没有精度损失的情况下,您不能使用float或double。首先,它们的精度是有限的,对于float大约为7-8个十进制数字,对于double约为16个数字。除此之外,Java浮点类型在内部是二进制的,因此它们无法存储一些小数而不会失去精度。如果您确实需要精确的小数,请使用java.math.BigDecimal。阅读“Effective Java”第48项:“如果需要精确答案,请避免使用float和double”。
你可以使用 Double
代替 Float
System.out.println(Double.valueOf("1553781.9829"));
System.out.println(Double.parseDouble("1553781.9829"));
Double
而不是Float
。 - davidrac"1553781.9999999999"
将变成1553782
。 - Salman A