我想将字符串转换为浮点数我说:
System.out.println(Float.parseFloat("1553781.9829"));
输出:
1553782.0
我说:
System.out.println(Float.valueOf("1553781.9829"));
输出:
1553782.0
如何在不损失精度的情况下获得浮点数?
我想将字符串转换为浮点数我说:
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
这就像为您的所有操作提供方法的普通包装类一样。是的,它也需要参数作为字符串。
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
您不能使用 float 或 double 而不会有丢失精度的风险。首先,它们的精度是有限的,对于浮点数,它大约是 7-8 位十进制数字,对于双 ~16 位数字。除此之外,Java 浮点类型在内部是二进制的,因此它们不能在不丢失精度的情况下存储一些小数。如果您确实需要精确的小数部分,请使用 java.math.BigDecimal。阅读“Effective Java”第 48 条:“如果需要准确答案,请避免使用 float 和 double”。
而不是Float
你可以使用Double
System.out.println(Double.valueOf("1553781.9829"));
System.out.println(Double.parseDouble("1553781.9829"));