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