程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 克隆

  • 类型转换

  • 日期时间

  • IO流相关

  • 工具类

    • 字符串工具 - `StrUtil`
    • 16进制工具 - `HexUtil`
    • 转义工具 - `EscapeUtil`
    • Hash算法工具 - `HashUtil`
    • URL 工具类 - `URLUtil`
    • XML 工具类 - `XmlUtil`
    • 对象工具类 - `ObjectUtil`
    • 反射工具类 - `ReflectUtil`
    • 泛型类型工具类 - `TypeUtil`
    • 分页工具类 - `PageUtil`
    • 剪贴板工具类 - `ClipboardUtil`
    • 类处理工具类 - `ClassUtil`
    • 枚举工具类 - `EnumUtil`
    • 命令行工具类 - `RuntimeUtil`
    • 数字工具类 - `NumberUtil`
      • 1. 加减乘除运算
      • 2. 保留小数
      • 3. 数字格式化
      • 4. 校验数字
      • 5. 随机数生成
      • 6. 其它常用方法
    • 数组工具类 - `ArrayUtil`
    • 随机工具类 - `RandomUtil`
    • 唯一ID工具类 - `IdUtil`
    • 压缩工具类 - `ZipUtil`
    • 引用工具 - `ReferenceUtil`
    • 正则工具 - `ReUtil`
    • 身份证工具 - `IdcardUtil`
    • 信息脱敏工具 - `DesensitizedUtil`
    • 社会信用代码工具 - `CreditCodeUtil`
    • SPI 加载工具 - `ServiceLoaderUtil`
    • 字符编码工具 - `CharsetUtil`
    • 类加载工具 - `ClassLoaderUtil`
  • 语言特性

  • JavaBean

  • 集合类

  • Map

  • Codec编码

  • 文本操作

  • 注解

  • 比较器

  • 异常

  • 数学

  • 线程和并发

  • 图片

  • 网络

  • 源码编译

  • 配置文件

  • 日志

  • 缓存

  • JSON

  • 加密解密

  • DFA查找

  • HTTP客户端

  • 定时任务

  • 扩展

  • 切面

  • 脚本

  • Office文档操作

  • 系统调用

  • 图形验证码

  • 网络Socket

  • JWT

  • Hutoll
  • 工具类
scholar
2024-08-20
目录

数字工具类 - NumberUtil

# 数字工具类 - NumberUtil

简介

NumberUtil 是 Hutool 提供的一个针对数字运算的工具类,封装了常用的数学运算、数字格式化、随机数生成、数字校验等功能,简化了对数字的操作。它不仅解决了 float 和 double 类型无法进行精确计算的问题,还提供了许多便捷的方法来处理数字运算和格式化。

# 1. 加减乘除运算

NumberUtil 提供了 add、sub、mul、div 方法,用于对数字进行加减乘除运算。这些方法会将 double 转为 BigDecimal 后进行计算,避免了 float 和 double 计算时的精度问题。

import cn.hutool.core.util.NumberUtil;

public class NumberUtilExample {
    public static void main(String[] args) {
        // 加法运算
        double resultAdd = NumberUtil.add(1.2, 3.4);
        System.out.println("加法结果: " + resultAdd); // 结果:4.6

        // 减法运算
        double resultSub = NumberUtil.sub(5.5, 2.2);
        System.out.println("减法结果: " + resultSub); // 结果:3.3

        // 乘法运算
        double resultMul = NumberUtil.mul(2.5, 4.0);
        System.out.println("乘法结果: " + resultMul); // 结果:10.0

        // 除法运算
        double resultDiv = NumberUtil.div(9.0, 3.0);
        System.out.println("除法结果: " + resultDiv); // 结果:3.0
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  • add(Number... values):加法运算,支持多个数字相加。
  • sub(Number v1, Number v2):减法运算,支持两个数字相减。
  • mul(Number... values):乘法运算,支持多个数字相乘。
  • div(Number v1, Number v2):除法运算,支持两个数字相除。

作用: 这些方法解决了 float 和 double 类型的精度问题,适用于需要进行精确计算的场景,如财务计算、科学计算等。

实际开发场景: 在进行商业计算或任何对精度有要求的计算时,可以使用这些方法进行加减乘除运算。

# 2. 保留小数

NumberUtil 提供了两种方法来保留小数:round 和 roundStr。

import cn.hutool.core.util.NumberUtil;

public class NumberUtilExample {
    public static void main(String[] args) {
        // 保留4位小数,使用四舍五入模式
        double result1 = NumberUtil.round(123456.123456, 4).doubleValue();
        System.out.println("四舍五入保留4位小数: " + result1); // 结果:123456.1235

        // 保留2位小数,返回字符串形式
        String result2 = NumberUtil.roundStr(123456.128456, 2);
        System.out.println("四舍五入保留2位小数: " + result2); // 结果:123456.13
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
  • round(double value, int scale):使用四舍五入的方式保留指定位数的小数,返回 BigDecimal。
  • roundStr(double value, int scale):使用四舍五入的方式保留指定位数的小数,返回字符串。

作用: 这些方法适用于需要保留指定小数位数的场景,确保结果的精度。

实际开发场景: 在对金额、科学数据等进行格式化时,使用这些方法可以确保结果的精度和一致性。

# 3. 数字格式化

NumberUtil 提供了 decimalFormat 方法,用于对数字进行格式化。它支持自定义格式,如添加千分位、保留小数位等。

import cn.hutool.core.util.NumberUtil;

public class NumberUtilExample {
    public static void main(String[] args) {
        long speedOfLight = 299792458; // 光速,单位:米/秒

        // 将数字格式化为带有千分位的字符串
        String formatted = NumberUtil.decimalFormat(",###", speedOfLight);
        System.out.println("格式化后的光速: " + formatted); // 结果:299,792,458
    }
}
1
2
3
4
5
6
7
8
9
10
11
  • decimalFormat(String pattern, Object value):使用指定的格式化模式对数字进行格式化,返回格式化后的字符串。

作用: 该方法适用于需要对数字进行格式化的场景,如报表输出、UI 展示等。

实际开发场景: 在生成报表或输出人类可读的数值时,可以使用此方法对数字进行格式化。

# 4. 校验数字

NumberUtil 提供了一组方法,用于校验数字的类型。

import cn.hutool.core.util.NumberUtil;

public class NumberUtilExample {
    public static void main(String[] args) {
        // 判断是否为数字
        boolean isNumber = NumberUtil.isNumber("123.45");
        System.out.println("是否为数字: " + isNumber); // 结果:true

        // 判断是否为整数
        boolean isInteger = NumberUtil.isInteger("123");
        System.out.println("是否为整数: " + isInteger); // 结果:true

        // 判断是否为浮点数
        boolean isDouble = NumberUtil.isDouble("123.45");
        System.out.println("是否为浮点数: " + isDouble); // 结果:true

        // 判断是否为质数
        boolean isPrime = NumberUtil.isPrimes(7);
        System.out.println("是否为质数: " + isPrime); // 结果:true
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  • isNumber(CharSequence str):判断字符串是否为数字。
  • isInteger(CharSequence str):判断字符串是否为整数。
  • isDouble(CharSequence str):判断字符串是否为浮点数。
  • isPrimes(int number):判断数字是否为质数。

作用: 这些方法适用于需要校验用户输入或判断数字类型的场景。

实际开发场景: 在处理用户输入或需要验证数字格式时,可以使用这些方法进行校验,确保输入的有效性。

# 5. 随机数生成

NumberUtil 提供了生成不重复随机数的方法,可以生成指定范围内的不重复随机数列表。

import cn.hutool.core.util.NumberUtil;

import java.util.Arrays;

public class NumberUtilExample {
    public static void main(String[] args) {
        // 生成不重复的随机数列表,范围在[1, 100]之间,生成10个随机数
        int[] randomNumbers = NumberUtil.generateRandomNumber(1, 100, 10);
        System.out.println("生成的不重复随机数: " + Arrays.toString(randomNumbers));
    }
}
1
2
3
4
5
6
7
8
9
10
11
  • generateRandomNumber(int min, int max, int size):生成指定范围内的不重复随机数列表。
    • min:随机数的最小值。
    • max:随机数的最大值。
    • size:生成随机数的个数。

作用: 该方法适用于需要生成随机数的场景,如抽奖、随机选取等。

实际开发场景: 在需要生成不重复随机数的场景下,如彩票号码生成、抽奖号码生成等,可以使用此方法。

# 6. 其它常用方法

NumberUtil 还提供了多种数学运算和转换方法,常见的包括阶乘、平方根、最大公约数、最小公倍数、二进制转换等。

import cn.hutool.core.util.NumberUtil;

public class NumberUtilExample {
    public static void main(String[] args) {
        // 计算阶乘
        long factorial = NumberUtil.factorial(5);
        System.out.println("5的阶乘: " + factorial); // 结果:120

        // 计算平方根
        double sqrt = NumberUtil.sqrt(16);
        System.out.println("16的平方根: " + sqrt); // 结果:4.0

        // 计算最大公约数
        int gcd = NumberUtil.divisor(12, 18);
        System.out.println("12和18的最大公约数: " + gcd); // 结果:6

        // 计算最小公倍数
        int lcm = NumberUtil.multiple(12, 18);
        System.out.println("12和18的最小公倍数: " + lcm); // 结果:36

        // 将数字转换为二进制字符串
        String binaryStr = NumberUtil.getBinaryStr(10);
        System.out.println("10的二进制表示: " + binaryStr); // 结果:1010

        // 二进制字符串转换为int
        int intValue = NumberUtil.binaryToInt("1010");
        System.out.println("二进制1010转换为整数: " + intValue); // 结果:10

        // 比较两个数值的大小
        int comparison = NumberUtil.compare(10.5, 20.3);
        System.out.println("比较10.5和20.3的大小: " + comparison); // 结果:-1 (表示10.5小于20.3)
    }
}
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
  • factorial(int n):计算 n 的阶乘,返回 long 类型结果。
  • sqrt(double value):计算给定值的平方根,返回 double 类型结果。
  • divisor(int a, int b):计算两个整数的最大公约数。
  • multiple(int a, int b):计算两个整数的最小公倍数。
  • getBinaryStr(int value):将整数转换为二进制字符串。
  • binaryToInt(String binaryStr):将二进制字符串转换为 int 类型。
  • compare(Number a, Number b):比较两个数值的大小,返回 -1 表示前者小于后者,0 表示两者相等,1 表示前者大于后者。

作用: 这些方法涵盖了多种数学计算和数值转换的需求,适用于需要处理复杂数学运算和数据格式转换的场景。

实际开发场景: 在需要进行数学计算或数据格式转换的场景下,如数据分析、科学计算、加密解密、二进制操作等,都可以使用这些方法。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
命令行工具类 - `RuntimeUtil`
数组工具类 - `ArrayUtil`

← 命令行工具类 - `RuntimeUtil` 数组工具类 - `ArrayUtil`→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式