装修知识

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值的区别。