// 计算百分比, v1*100/v2
attendmonthly = SZJZNumberUtil.calPercent(workerattendmonthlytj.getTotaldays(), monthdays, NumConstant.TWO);
public class SZJZNumberUtil
{/*** double常量:0*/public static final double ZREA_DOUBLE = 0D;/*** double常量:100*/public static final double HUNDRED_DOUBLE = 100D;/*** * [截取2位小数]* * @param num*            原小数* @return 如果不足2位小数,按照原数据返回;如果是整数+D传入,则返回整数+“.0”;如果超过两位则返回截取2位小数的数字*/public static double getInterceptDouble(double num) {return getInterceptDouble(num, 2);}/*** * [截取第n位以后的数字,返回double]* * @param num*            原小数* @param n*            第n位* @return n>0 截取几位小数;n<0 截取第n的绝对值位置之后的数字*         eg: 6.18 n=1,result=6.1;n=-1,result=0.0*/public static double getInterceptDouble(double num, int n) {BigDecimal bigDecimal = BigDecimal.valueOf(num);return bigDecimal.setScale(n, BigDecimal.ROUND_DOWN).doubleValue();}/*** * [四舍五入,保留两位小数]* * @param num*            原小数* @return 如果不足2位小数,按照原数据返回;如果是整数+D传入,则返回整数+“.0”;如果超过两位则返回保留两位小数*         eg:*         num=12.2,result=12.2;num=10,result=10.0;num=12.123,retult=12.12;num=12.125,result=12.13*/public static double getRoundDouble(double num) {return getRoundDouble(num, 2);}/*** * [四舍五入]* * @param num*            原小数* @param n*            第n位* @return n>0 保留n位小数;n<0 保留第n的绝对值位置的数字*         eg: num=15.123,n=1,result=15.1;n=-1,result=20.0;n=-2,result=0.0*         num=55.12,n=-2,result=100.0*/public static double getRoundDouble(double num, int n) {BigDecimal bigDecimal = BigDecimal.valueOf(num);return bigDecimal.setScale(n, BigDecimal.ROUND_HALF_UP).doubleValue();}/*** * [获取基础数据类型int数据,如果为null,返回0]* * @param num*            整数* @return 整数*/public static int getInt(Integer num) {if (Objects.isNull(num)) {return NumConstant.ZERO;}return num.intValue();}/*** * [获取基础数据类型double数据,如果为null,返回0D]* * @param num*            浮点数* @return double浮点数*/public static double getDouble(Double num) {if (Objects.isNull(num)) {return 0D;}return num.doubleValue();}/*** 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入** @param v1*            被除数* @param v2*            除数* @param scale*            表示需要精确到小数点以后位数。* @return 两个参数的商*/public static double div(double v1, double v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = BigDecimal.valueOf(v1);BigDecimal b2 = BigDecimal.valueOf(v2);return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();}/*** 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字【截取】** @param v1*            被除数* @param v2*            除数* @param scale*            表示需要精确到小数点以后位数。* @return 两个参数的商*/public static double divIntercept(double v1, double v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = BigDecimal.valueOf(v1);BigDecimal b2 = BigDecimal.valueOf(v2);return b1.divide(b2, scale, BigDecimal.ROUND_DOWN).doubleValue();}/*** 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字【直接进一】** @param v1*            被除数* @param v2*            除数* @param scale*            表示需要精确到小数点以后位数。* @return 两个参数的商*/public static double divUp(double v1, double v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = BigDecimal.valueOf(v1);BigDecimal b2 = BigDecimal.valueOf(v2);return b1.divide(b2, scale, BigDecimal.ROUND_UP).doubleValue();}/*** * [相加]* * @param v1* @param v2* @return*/public static double plus(double v1, double v2) {BigDecimal b1 = BigDecimal.valueOf(v1);BigDecimal b2 = BigDecimal.valueOf(v2);return b1.add(b2).doubleValue();}
/*** * [相减]* * @param v1* @param v2* @return*/public static double minus(double v1, double v2) {BigDecimal b1 = BigDecimal.valueOf(v1);BigDecimal b2 = BigDecimal.valueOf(v2);return b1.subtract(b2).doubleValue();}/*** * [相乘]* * @param v1* @param v2* @return*/public static double multiply(double v1, double v2) {BigDecimal b1 = BigDecimal.valueOf(v1);BigDecimal b2 = BigDecimal.valueOf(v2);return b1.multiply(b2).doubleValue();}/*** * [计算百分比, v1*100/v2]* * @param v1* @param v2* @param scale*            小数精度(四舍五入)* @return*/public static double calPercent(Double v1, Double v2, int scale) {if (Objects.isNull(v1) || Objects.isNull(v2)) {return ZREA_DOUBLE;}return calPercent(v1.doubleValue(), v2.doubleValue(), scale);}/*** * [计算百分比, v1*100/v2]* * @param v1* @param v2* @param scale*            小数精度(四舍五入)* @return*/public static double calPercent(double v1, double v2, int scale) {return BigDecimal.valueOf(v2).compareTo(BigDecimal.ZERO) == 0 ? ZREA_DOUBLE: div(multiply(v1, HUNDRED_DOUBLE), v2, scale);}/*** * [v1与v2比较大小,v1>v2:1;v1<v2:-1;v1=v2:0]* * @param vl* @param v2* @return*/public static int compareTo(double vl, double v2) {return BigDecimal.valueOf(vl).compareTo(BigDecimal.valueOf(v2));}}

数字工具类-计算百分比相关推荐

  1. Java中的数字工具类-----持续总结中

    标题 java获取任意数字的个位,十位,百位,千位,万位... JAVA实现数值跟人民币大写(中文简体.繁体)互转 Java实现数值金额指定分割符 java代码去除千分号 BigDecimal判空处理 ...

  2. java 生成随机md5_Java常用工具类(计算MD5,验证码随机生成,天数差值计算)

    写这个博文的目的是为了怕哪天自己的电脑崩溃了,以前写的那些代码就没了,所以将自己写的工具类贴出来,方便以后去使用,也避免自己反复去创造轮子, 也可以对这些方法进行简单修改来完成业务需求,这样就可以极大 ...

  3. java工具类-计算相对时间的工具类即两个时间的时间差

    java相对时间的工具类,此类中有两个暴露的方法,相对于当前时间的方法和相对于某时间的方法. 返回String,如:2小时前/3天2时13秒/昨天 具体请运行查看 (DateTimeFormatUti ...

  4. 使用hutool工具类,计算日期差

    需求: 参数: 计划日期,实际日期 返回: 超时or提前,天数 hutool工具类 <dependency><groupId>cn.hutool</groupId> ...

  5. 使用joda-time工具类 计算时间相差多少 天,小时,分钟,秒

    下面程序使用了两种方法计算两个时间相差 天,小时,分钟,秒 package jodotest; import java.text.ParseException; import java.text.Si ...

  6. java中将数字颠倒的工具类,java开发中常用的数字工具类

    import java.math.BigDecimal; import org.apache.commons.lang.RandomStringUtils; public class NumberUt ...

  7. android 经纬度工具类,计算经纬度距离工具类

    public class LocationUtils { private static double EARTH_RADIUS = 6378.137; private static double ra ...

  8. Java工具类 计算某个时间距离当前时间相差多少天、多少小时、多少分、多少秒

    /*** 计算传入时间距离当前时间多久** @param date* @return*/ public static String getTimeDiff(String date) {if (Obje ...

  9. java时间差工具_Java 工具类 计算两个日期之间相差 天 小时 分钟 秒

    java 日期做差 : 场景 判断过期 public static String dateDiff(String startTime, String endTime, String format) { ...

最新文章

  1. java中什么是递归_java中什么是递归
  2. 2006---2009年杭电计算机历年研究生复试---笔试编程
  3. java实现文件加密与解密_Java实现文件的加密解密功能示例
  4. scala和java像不像_关于Java和Scala同步的五件事你不知道
  5. 读过的最好的epoll讲解
  6. 95-170-046-源码-Time-Flink时间系统系列之ProcessFunction使用分析
  7. UVa1586 - Molar mass
  8. visio增加连接点
  9. Linux随笔14-私有CA搭建并签发证书、ssh客户端和服务器端常用参数
  10. 【华为云】python调用华为云API,获取token值
  11. 解决FAT32格式U盘安装win10时0x8007000D错误
  12. 被举报了,越想越后怕...
  13. 复杂网络分析库NetworkX学习笔记(4):统计指标计算
  14. 计算机应用基础操作题答案,电大本科计算机应用基础网考操作题及答案
  15. ***防火墙密码恢复手记
  16. Delphi 10.3.1 RIO官方下载
  17. 人工智能轨道交通行业周刊-第2期(2022.6.13-6.19)
  18. 口语语汇单词篇(4)
  19. 【水滴石穿】ReactNativeDemo
  20. java mediainfo.dll_mediainfo.dll怎么用

热门文章

  1. MindSpore:对image作normalize的目的是什么?
  2. C#打印时,自定义纸张
  3. 稀疏矩阵的存储以及转置、加法、乘法操作实现
  4. Linux多线程矩阵,操作系统实验(进程)多线程实现矩阵乘法
  5. Jenkins服务器从linux往wins服务器传送文件jar/war
  6. Java同步与死锁解析
  7. Simscape _弹簧减震系统(Spring mass Damper system) _Part 1
  8. HDU 4928 Series2
  9. Google Inception Net介绍及Inception V3结构分析
  10. 上万代码——室内自主巡检无人机项目攻城战(一)