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



posted on 2023-02-22 10:26  朱古力88  阅读(119)  评论(0编辑  收藏  举报