最近业务中有一个百分比的计算需求,参考过其他计算百分比的方法发现比较繁琐,这里提供一个通用并且可以保证精度的计算方法,使用一行代码就可以实现百分数计算,下面说一下实现方式。
    这里使用hutool中的工具类
    需要的依赖:

	<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>4.1.14</version>
		</dependency>

    用到的工具类:NumberUtil,百分数具体计算方式参考如下:

// 参数一:除数;参数2:被除数;参数三:小数点后保留的位数,舍入模式模式为四舍五入,符合大多数计算场景
 int div3 = NumberUtil.div("1", "3",2).multiply(BigDecimal.valueOf(100)).intValue();
        System.out.println(div3+"%");  // 33%

    使用一行代码可以实现保留指定位数的百分数计算场景,对于NumberUtil中div封装api感兴趣的同学可以继续往下看。
    java中除法一般用/,但是int类相除最终获取的结果是整数,所以不用考虑。

 public static void main(String[] args) {
        System.out.println(2/3);  // 0
    }

    考虑到精度会想到:float double bigdecimal,三者精度优先级是 bigdecimal> double > float .这里重点介绍bigdecimal,优点是精度相对比较高,并且可以指定获取的位数,对于精度支持8种舍入模式。
    NumberUtil中div就是基于bigdecimal中divide和八种舍入模式进行的封装。实际执行的就是:
BigDecimal中的divide

 public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode) {
        return divide(divisor, scale, roundingMode.oldMode);
    }

舍入模式默认指定:RoundingMode.HALF_UP,可以理解为四舍五入。
    如果感觉有所帮助欢迎点赞关注和评论!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐