美文网首页
BigDecimal比较数据大小

BigDecimal比较数据大小

作者: 程序员张晴天 | 来源:发表于2018-12-25 20:38 被阅读21次

上周遇到个需求是上传文件的大小不能超过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比较数据大小

      本文链接:https://www.haomeiwen.com/subject/mujqlqtx.html