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

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

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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值