Java除法运算精度问题
结论:不要将两个int类型的变量直接相除,会出现精度丢失问题,最好将其中一个变量强制转化成浮点型
现象: 两个int类型相除的结果要取整,如果相除得到0.53,那么结果会变成0,出现精度丢失的问题
DecimalFormat df = new DecimalFormat("0.00%"); int totalCompareAppCount=262; int ctrRise=15; String ctrRiseProportionPerReq=totalCompareAppCount>0?df.format(ctrRise/totalCompareAppCount):df.format(0); System.out.println(ctrRiseProportionPerReq);
上面的代码结果是0.00%
为了不取整需要将其中一个数强制类型转化为float或者double,
DecimalFormat df = new DecimalFormat("0.00%"); int totalCompareAppCount=262; int ctrRise=15; String ctrRiseProportionPerReq=totalCompareAppCount>0?df.format((float)ctrRise/totalCompareAppCount):df.format(0); System.out.println(ctrRiseProportionPerReq);
上面的代码结果为5.73%
知识点:
“/” 除以取整 ,“%”除以取余 ,
但是 “/” 被除数如果是浮点型数值 获取到的值可以是浮点型精确值
关注代码片段:
ctrRise 为 int 类型:
ctrRise/totalCompareAppCount
ctrRise 为 浮点型数值:
(float)ctrRise/totalCompareAppCount