一、数字格式化

我们使用DecimalFormat来格式化数字。

DecimalFormat中有几个特殊的字符需要说明:

0 代表阿拉伯数字,使用特殊字符0表示数字的一位阿拉伯数字,如果该位不存在数字,则显示0

# 代表阿拉伯数字,使用特殊字符'#'表示数字的一位阿拉伯数字,如果该位存在数字,则显示字符,如果该位不存在数字,则不显示。

. 代表小数分隔符或货币小数分隔符

- 代表负号

, 代表分隔符

% 代表放置在数字的前缀和后缀,将数字乘以100显示位百分数

\u00A4 代表放置在数字前缀或后缀,做为货币记号

代码示例如下:

import java.text.DecimalFormat;

/**
 * @author qx
 * @date 2023/06/10
 * @desc DecimalFormat测试
 */
public class DecimalFormatDemo {
    public static void main(String[] args) {
        simpleFormat("000000.000", 123.78);
        simpleFormat("######.###", 123.78);
        simpleFormat("#%", 0.5);
        simpleFormat("\u00A4#", 20);
    }

    private static void simpleFormat(String pattern, double value) {
        DecimalFormat decimalFormat = new DecimalFormat(pattern);
        String output = decimalFormat.format(value);
        System.out.println(output);
    }
}

程序执行结果:

000123.780
123.78
50%
¥20

二、Math类

ceil:返回大于等于参数的最小整数

floor: 返回小于等于参数的最大整数

round:将参数加上0.5后返回与参数最近的整数

max(a,b):返回两个数之间的最大值

min(a,b): 返回两个数之间的最小值

abs:返回参数的绝对值

示例代码如下:

/**
 * @author qx
 * @date 2023/06/10
 * @desc
 */
public class MathDemo {
    public static void main(String[] args) {
        // 输出4.0
        System.out.println(Math.ceil(3.5));
        // 输出3.0
        System.out.println(Math.floor(3.5));
        // 输出4
        System.out.println(Math.round(3.5));

        // 输出8
        System.out.println(Math.max(3, 8));
        // 输出2
        System.out.println(Math.min(3, 2));
        // 输出3.2
        System.out.println(Math.abs(-3.2));
    }
}

三、BigInteger类

用于实现更大的整数。

add:加法

subtract:减法

multiply:乘法

divide:除法

示例代码如下:

import java.math.BigInteger;

/**
 * @author qx
 * @date 2023/06/10
 * @desc BigInteger测试
 */
public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger b1 = new BigInteger("987654321");
        BigInteger b2 = new BigInteger("123456789");
        System.out.println("加法:" + b1.add(b2));
        System.out.println("减法:" + b1.subtract(b2));
        System.out.println("乘法:" + b1.multiply(b2));
        System.out.println("除法:" + b1.divide(b2));
    }
}

四、BigDecimal

BigDecimal和BigInteger都可以实现大数字的运算,不同的是BigDecimal加入了小数的概念。一般的float和double只可以用来做科学计算或工程计算,但是做不了商业计算,实现不了高精度的计算。所以要用到BigDecimal实现如何精度的计算。

add:加法

subtract:减法

multiply:乘法

divide(BigDecimal divisor,int scale,RoundingMode roundingMode):除法 方法中的3个参数分别代表除数、商的小数点后的位数、近似处理模式。

RoundingMode.HALF_DOWN:对商进行四舍五入的操作,如果商的最后一位小于等于5,则舍弃。如果最后一位大于5,则进位操做,如7.5~7

RoundingMode.HALF_UP:对商进行四舍五入的操作,如果商的最后一位小于等于5,则舍弃。如果最后一位大于5,则进位操做,如7.5~8

示例代码如下:

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * @author qx
 * @date 2023/06/10
 * @desc BigDecimal测试
 */
public class BigDecimalDemo {
    public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal("0.009");
        BigDecimal b2 = new BigDecimal("0.001");
        // 加法
        System.out.println(b1.add(b2));
        // 减法
        System.out.println(b1.subtract(b2));
        // 乘法
        System.out.println(b1.multiply(b2));
        // 除法 保留5位小数  四舍五入
        System.out.println(b1.divide(b2, 5, RoundingMode.HALF_UP));
    }
}

程序执行结果

0.010
0.008
0.000009
9.00000
06-11 02:50