• 常用的数值工具类



     

    数值型包括

    • byte、short、int、long、float、double及对应的包装类型
    • BigInteger、BigDecimal
       

    commons-lang3的NumberUtils

    常用常量

    //给数值型的包装类型 Byte、Short、Integer、Long、Float、Double 都提供了 0、1、-1 三个值的常量
    Long longZero = NumberUtils.LONG_ZERO;
    Long longOne = NumberUtils.LONG_ONE;
    Long longMinusOne = NumberUtils.LONG_MINUS_ONE;
    
    //Integer类型还提供常用的常量2
    Integer integerTwo = NumberUtils.INTEGER_TWO;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

     

    常用方法

    //计算各类数值型的最值,参数数值类型相同、个数不定
    int min = NumberUtils.min(1, 2, 3);
    int max = NumberUtils.max(1, 2, 3);
    
    
    //检查字符串中的字符是否都为unicode数字,digit 数字
    boolean isDigits = NumberUtils.isDigits(str);
    //检查str能否被转换为unicode数字
    boolean isParsable = NumberUtils.isParsable(str);
    //注意此处是unicode数字:除了阿拉伯数字0~9,१२३之类的梵文数字、全角数字也属于unicode数字。null、空串返回false
    
    
    //从String创建各类数值型的包装类型、BigInteger、BigDecimal,null返回null,转换失败会抛出异常
    Integer integer = NumberUtils.createInteger(str);
    BigInteger bigInteger = NumberUtils.createBigInteger(str);
    BigDecimal bigDecimal = NumberUtils.createBigDecimal(str);
    
    
    //将String转换为各类数值型的基本类型,null、转换失败时返回默认值
    int i1 = NumberUtils.toInt(str, defaultValue);
    //缺省默认值时,整型默认取0,浮点型默认取0.0
    int i2 = NumberUtils.toInt(str);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

     

    spring的NumberUtils

    //数值型的class对象集合
    Set<Class<?>> standardNumberTypes = NumberUtils.STANDARD_NUMBER_TYPES;
    
    //将String转换为指定的数值包装类型,转换失败会抛出异常
    Integer integer1 = NumberUtils.parseNumber(str, Integer.class);
    
    • 1
    • 2
    • 3
    • 4
    • 5

     

    hutool的NumberUtil

    数学运算

    //提供精确的加法、减法、乘法、乘方(幂)运算,返回BigDecimal
    //参数支持Number、String、BigDecimal类型,参数类型相同、个数不定
    BigDecimal add = NumberUtil.add(1, 2, 3, 4);
    BigDecimal sub = NumberUtil.sub(1, 2, 3, 4);
    BigDecimal mul = NumberUtil.mul(1, 2, 3, 4);
    BigDecimal pow = NumberUtil.pow(2, 10);
    
    
    //相除,保留指定位数的小数(后面部分四舍五入),支持Number、String、BigDecimal类型
    double div = NumberUtil.div(10, 3, 2);
    
    //相除,将结果向上取整
    int ceilDiv = NumberUtil.ceilDiv(10, 3);
    
    
    //计算阶乘 n! = 1*2*3*...*(n-1)*n,支持long、BigInteger
    long factorial1 = NumberUtil.factorial(10);
    //上面默认起始值为0(不含),可指定起始值
    long factorial2 = NumberUtil.factorial(10, 5);
    
    
    //计算最大公约数
    int divisor = NumberUtil.divisor(100, 150);
    //计算最小公倍数
    int multiple = NumberUtil.multiple(10, 15);
    
    
    //求各种数值型的最值,参数的数值类型相同、个数不定
    int min = NumberUtil.min(1, 2, 3);
    int max = NumberUtil.max(1, 2, 3);
    
    
    //计算等分的份数,参数分别指定总数、每份数量
    int count = NumberUtil.count(115, 10);
    //计算等分的每份数量(最后一份数量会少些),参数分别指定总数、份数
    int partValue = NumberUtil.partValue(115, 10);
    
    
    //计算String表达式的结果,只支持加减乘除、%取模
    double calculate = NumberUtil.calculate("1 * 2 / 3 + 4 ");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

     

    判断、比较

    //String的内容是否是指定数值类型
    boolean isNumber = NumberUtil.isNumber("123");
    
    //范围小的整数也算,eg. int在long范围内,也算long
    boolean isInteger = NumberUtil.isInteger("123");
    boolean isLong = NumberUtil.isLong("123");
    
    //是否是浮点数,要有小数部分才算浮点数,如果只是整数则不算
    boolean isDouble = NumberUtil.isDouble("123");
    
    
    //是否是偶数
    boolean isEven = NumberUtil.isEven(123);
    //是否是奇数
    boolean isOdd = NumberUtil.isOdd(123);
    //是否是质数(素数)
    boolean isPrimes = NumberUtil.isPrimes(123);
    
    
    //判断2个BigDecimal的数值大小
    boolean equals = NumberUtil.equals(new BigDecimal(1), new BigDecimal(2));
    boolean isLess = NumberUtil.isLess(new BigDecimal(1), new BigDecimal(2));
    boolean isLessOrEqual = NumberUtil.isLessOrEqual(new BigDecimal(1), new BigDecimal(2));
    boolean isGreater = NumberUtil.isGreater(new BigDecimal(1), new BigDecimal(2));
    boolean isGreaterOrEqual = NumberUtil.isGreaterOrEqual(new BigDecimal(1), new BigDecimal(2));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

     

    类型转换、特殊情况兼容

    //数值包装类型转换String的元生parseXxx()方法,为blank时会抛出异常
    int i1 = Integer.parseInt("123");
    //提供将String转换为各种数值基本类型的方法,兼容blank,为blank是返回目标类型的默认值
    int i2 = NumberUtil.parseInt("123");
    
    
    //原生的String类型的构造方法,参数为blank或两端有空白符时会抛出异常
    BigInteger bigInteger = new BigInteger("123");
    BigDecimal bigDecimal = new BigDecimal("123");
    
    //兼容blank,当做0处理
    BigInteger bigInteger1 = NumberUtil.toBigInteger(" ");
    BigDecimal bigDecimal1 = NumberUtil.toBigDecimal(" ");
    
    //兼容blank、两端有空白符,返回null
    BigInteger bigInteger2 = NumberUtil.newBigInteger(" 123");
    
    //兼容参数BigDecimal为null的情况,为null时返回 BigDecimal.ZERO
    BigDecimal bigDecimal2 = NumberUtil.null2Zero(null);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

     

    生成连续数字

    此处都是双闭区间 [start,stop]

    //将指定区间上的整数(Integer)添加到集合中
    Collection<Integer> integers1 = NumberUtil.appendRange(1, 9, new ArrayList<>());
    //可指定step步长
    Collection<Integer> integers2 = NumberUtil.appendRange(0, 100, 10, new ArrayList<>());
    
    
    //将指定区间上的整数收集到数组中
    int[] range1 = NumberUtil.range(0, 100, 10);
    //缺省step时默认为1
    int[] range2 = NumberUtil.range(0, 100);
    //缺省start时默认为0
    int[] range3 = NumberUtil.range(100);
    
    
    //在指定区间上生成不重复的n个随机整数
    int[] ints = NumberUtil.generateRandomNumber(1, 100, 10);
    Integer[] integers = NumberUtil.generateBySet(1, 100, 10);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

     

    格式化

    //将整数、浮点数格式化为指定格式的String
    String decimalFormat1 = NumberUtil.decimalFormat("0.00", 1.234567);
    String decimalFormat2 = NumberUtil.decimalFormat("#%", 1234567);
    
    
    //将double转换为百分数,第2个参数指定百分数要保留的小数位数
    String formatPercent = NumberUtil.formatPercent(1.234567, 2);
    //转换为金额格式,整数部分每3位用英文逗号分隔,小数部分保留2位
    String decimalFormatMoney = NumberUtil.decimalFormatMoney(1234.567);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    具有计算功能的模拟信号平均值采集隔离放大器
    iOS APP内存泄漏的问题
    万能的Python爬虫模板来了
    【C语言入门】ZZULIOJ 1036-1040
    MATLAB小技巧(18)矩阵分析--熵权法
    Spring核心注解详解(一)
    05 proxy_pass 携带有 uri 的场景下面的处理
    Spring中事务的传播行为有哪些
    保研计网复习笔记:IP层
    代码随想录算法训练营第四十八天 | 198.打家劫舍 & 213. 打家劫舍 II & 337. 打家劫舍 III
  • 原文地址:https://blog.csdn.net/chy_18883701161/article/details/125973350