我想将字符串转换为float我说:
System.out.println(Float.parseFloat("1553781.9829"));
输出:
1553782.0
我说:
System.out.println(Float.valueOf("1553781.9829"));
输出:
1553782.0
如何在不损失精度的情况下获得Float?
答案 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"));