全国咨询热线123456789
bigdecimal
发布时间:2020-12-04 16:33浏览次数:
  • bigdecimal
  • bigdecimal比较大小

    上周遇到个需求是上传文件的大小不能超过5M,因为想尝试着获取准确值,所以使用了bigdecimal类来计算,而通常使用的float和double在计算时是会丢失精度的。

    BigDecimal常用来获取精确的计算结果,float和double类型主要是为了科学计算和工程计算而设计的,并不会提供完全精确的结果。

            long fileSize1 = 3450;      //小于5M
            long fileSize2 = 6349000;   //大于5M
            long fileSize3 = 5242880;   //等于5M
            BigDecimal size1 = new BigDecimal(fileSize1 / 1024.0 / 1024.0);  // size1 = 0.0032901763916015625
            BigDecimal size2 = new BigDecimal(fileSize2 / 1024.0 / 1024.0);  // size2 = 6.05487823486328125
            BigDecimal size3 = new BigDecimal(fileSize3 / 1024.0 / 1024.0);  // size3 = 5
            int compareResult1 = size1.compareTo(new BigDecimal(5));
            int compareResult2 = size2.compareTo(new BigDecimal(5));
            int compareResult3 = size3.compareTo(new BigDecimal(5));
            System.out.println("compareResult1 = " + compareResult1);    //小于5,结果为-1
            System.out.println("compareResult2 = " + compareResult2);    //大于5,结果为1
            System.out.println("compareResult3 = " + compareResult3);    //等于5,结果为0
    
            float floatResult1 = (float) (fileSize1 / 1024.0 / 1024.0);  //0.0032901764
            float floatResult2 = (float) (fileSize2 / 1024.0 / 1024.0);  //6.054878
            float floatResult3 = (float) (fileSize3 / 1024.0 / 1024.0);  //5.0
    

    使用BigDecimal的compareTo方法来将结果进行对比。

    根据代码可以看出float和BigDecimal值的区别。

  • bigdecimal
  • -->