最近业务中有一个百分比的计算需求,参考过其他计算百分比的方法发现比较繁琐,这里提供一个通用并且可以保证精度的计算方法,使用一行代码就可以实现百分数计算,下面说一下实现方式。
这里使用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,可以理解为四舍五入。
如果感觉有所帮助欢迎点赞关注和评论!