双精度浮点型数据运算精度丢失以及数据的格式化问题

来源:互联网 发布:月子中心 知乎 编辑:程序博客网 时间:2024/04/28 02:53

不多说,直接上测试代码:

public class DemoBigDicimal {    @Test    public void test(){        DecimalFormat df = new DecimalFormat("#,##0.00");        DecimalFormat df2 = new DecimalFormat("#.00");//这种如果是0.xx的话,显示还是有问题.前面的0会消失        DecimalFormat df3 = new DecimalFormat("0.00");//        float a = 20000000f;        float b = 12f;        System.out.println(df.format(a/b));//1,666,666.62        System.out.println(df2.format(a/b));//1666666.62        System.out.println(a/b);//1666666.6        double c = 1.0;        double d = 3.0;        System.out.println(df.format(c/d));//0.33        System.out.println(df2.format(c/d));//.33        System.out.println(df3.format(c/d));//0.33        System.out.println(c/d);//0.3333333333333333        System.out.println((float)1/3 + (float)2/3);//1.0        System.out.println("----------------------------------------------------------------------");        System.out.println(1.79 + 0.12);//1.9100000000000001        System.out.println(add(1.79,0.12));//1.91        System.out.println(2.01 - 0.12);//1.8899999999999997        System.out.println(sub(2.01,0.12));//1.89        System.out.println(1.01 * 1.3);//1.3130000000000002        System.out.println(mul(1.01,1.3));//1.313        System.out.println(0.69 / 10);//0.06899999999999999        System.out.println(div(0.69,10));//0.069    }    public static double add(double num,double num2){        BigDecimal n = new BigDecimal(Double.toString(num));        BigDecimal n2 = new BigDecimal(Double.toString(num2));        return n.add(n2).doubleValue();    }    public static double sub(double num,double num2){        BigDecimal n = new BigDecimal(Double.toString(num));        BigDecimal n2 = new BigDecimal(Double.toString(num2));        return n.subtract(n2).doubleValue();    }    public static double mul(double num,double num2){        BigDecimal n = new BigDecimal(Double.toString(num));        BigDecimal n2 = new BigDecimal(Double.toString(num2));        return n.multiply(n2).doubleValue();    }    public static double div(double num,double num2){        BigDecimal n = new BigDecimal(Double.toString(num));        BigDecimal n2 = new BigDecimal(Double.toString(num2));        return n.divide(n2).doubleValue();    }}
原创粉丝点击