今天在做计算时遇到一个问题代码如下:
public class Test1 {
   public static void main(String[] args){
   
   String c="0.123";
   System.out.println(Float.parseFloat(c));
   System.out.println(Float.parseFloat(c)+0.8f);  
}打印出来的是:0.92300004,当变成0.6f时是0.72300005,而其他例如0.1,0.2等就不会出现这样‘00004’的问题。
请问如果要求精确的小数,而且不用舍位解决这种问题的办法!谢谢!

解决方案 »

  1.   

    改成Double的话就不会有那种情况,这和Float的精度有关
      

  2.   

    小数点后都是近似值,而不是准确值
    如果想使用准确的,比如货币,可以用
    BigDecimal
      

  3.   

    写成函数方便调用,加减乘除都有了:import java.math.BigDecimal;
    public float add(float v1,float v2){
      BigDecimal b1 = new BigDecimal(Float.toString(v1));
      BigDecimal b2 = new BigDecimal(Float.toString(v2));
      return b1.add(b2).floatValue();
     }  public float sub(float v1,float v2){
      BigDecimal b1 = new BigDecimal(Float.toString(v1));
      BigDecimal b2 = new BigDecimal(Float.toString(v2));
      return b1.subtract(b2).floatValue();
     }  public float mul(float v1,float v2){
      BigDecimal b1 = new BigDecimal(Float.toString(v1));
      BigDecimal b2 = new BigDecimal(Float.toString(v2));
      return b1.multiply(b2).floatValue();
     }  public float div(float v1,float v2){
      BigDecimal b1 = new BigDecimal(Float.toString(v1));
      BigDecimal b2 = new BigDecimal(Float.toString(v2));
      return b1.divide(b2,3,BigDecimal.ROUND_HALF_UP).floatValue();
     }