第七节 Java 金钱计算技能

亮子 2025-06-25 09:34:03 77 0 0 0

Java 金钱计算技能

基础货币计算

1.描述: 编写一个方法,接受两个BigDecimal类型的参数,返回它们的和。
2.描述: 编写一个方法,接受两个BigDecimal类型的参数,返回它们的差。
3.描述: 编写一个方法,接受两个BigDecimal类型的参数,返回它们的乘积。
4.描述: 编写一个方法,接受两个BigDecimal类型的参数,返回它们的商。
5.描述: 编写一个方法,接受一个BigDecimal类型的金额和一个整数倍数,返回金额乘以倍数后的结果。

精度与舍入

1.描述: 编写一个方法,接受一个BigDecimal类型的金额和一个RoundingMode枚举值,返回四舍五入后的金额。
2.描述: 编写一个方法,接受一个BigDecimal类型的金额,保留两位小数,并使用HALF_UP模式进行舍入。
3.描述: 编写一个方法,接受一个BigDecimal类型的金额,保留四位小数,并使用HALF_DOWN模式进行舍入。
4.描述: 编写一个方法,接受一个BigDecimal类型的金额,保留三位小数,并使用UP模式进行舍入。
5.描述: 编写一个方法,接受一个BigDecimal类型的金额,保留一位小数,并使用DOWN模式进行舍入。

货币格式化

1.描述: 编写一个方法,接受一个BigDecimal类型的金额和一个Locale对象,返回格式化的货币字符串。
2.描述: 编写一个方法,接受一个BigDecimal类型的金额,返回美国格式的货币字符串(例如:$1,234.56)。
3.描述: 编写一个方法,接受一个BigDecimal类型的金额,返回欧元格式的货币字符串(例如:€1.234,56)。
4.描述: 编写一个方法,接受一个BigDecimal类型的金额,返回日本格式的货币字符串(例如:¥1,234)。
5.描述: 编写一个方法,接受一个BigDecimal类型的金额,返回中国格式的货币字符串(例如:¥1,234.56)。

编程规范

6.编码、函数等命名符合规范
7. 核心功能函数添加注释

示例代码

package com.bwie;

import org.junit.jupiter.api.Test;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;

/**
 * @author 军哥
 * @version 1.0
 * @description: TODO
 * @date 2025/6/24 18:04
 */

public class TestBigDecimal {

    // add = 加法
    public BigDecimal add(BigDecimal a, BigDecimal b) {
        return a.add(b);
    }

    // sub = 减法
    public BigDecimal subtract(BigDecimal a, BigDecimal b) {
        return a.subtract(b);
    }

    // mul = 乘法
    public BigDecimal multiply(BigDecimal a, BigDecimal b) {
        return a.multiply(b);
    }

    // div = 除法
    public BigDecimal divide(BigDecimal a, BigDecimal b) {
        return a.divide(b);
    }

    public BigDecimal mulToInteger(BigDecimal a, Integer b) {
        //return a.multiply(new BigDecimal(b));
        BigDecimal bigDecimal = new BigDecimal(b);
        return a.multiply(bigDecimal);
    }

    @Test
    public void test1() {
        //1.描述: 编写一个方法,接受两个BigDecimal类型的参数,返回它们的和。

        BigDecimal a = new BigDecimal("10.0");
        BigDecimal b = new BigDecimal("20.0");
        System.out.println("a = " + a + ", b = " + b);

        BigDecimal sum = add(a, b);
        System.out.println("sum = " + sum);

        //2.描述: 编写一个方法,接受两个BigDecimal类型的参数,返回它们的差。

        BigDecimal difference = subtract(a, b);
        System.out.println("difference = " + difference);
        //3.描述: 编写一个方法,接受两个BigDecimal类型的参数,返回它们的乘积。

        BigDecimal multiply = multiply(a, b);
        System.out.println("multiply = " + multiply);

        //4.描述: 编写一个方法,接受两个BigDecimal类型的参数,返回它们的商。

        BigDecimal divide = divide(a, b);
        System.out.println("divide = " + divide);

        //5.描述: 编写一个方法,接受一个BigDecimal类型的金额和一个整数倍数,返回金额乘以倍数后的结果。
        Integer c = 2;
        BigDecimal mulToInteger = mulToInteger(a, c);
        System.out.println("mulToInteger = " + mulToInteger);

    }


    @Test
    public void test2() {
        BigDecimal number = new BigDecimal("3.1415926");
        System.out.println("number = " + number);

        //1.描述: 编写一个方法,接受一个BigDecimal类型的金额和一个RoundingMode枚举值,返回四舍五入后的金额。
        BigDecimal a = number.setScale(2, RoundingMode.HALF_UP);
        System.out.println("四舍五入: a = " + a);


        //2.描述: 编写一个方法,接受一个BigDecimal类型的金额,保留两位小数,并使用HALF_UP模式进行舍入。
        BigDecimal b = number.setScale(2, RoundingMode.HALF_UP);
        System.out.println("HALF_UP: b = " + b);

        //3.描述: 编写一个方法,接受一个BigDecimal类型的金额,保留四位小数,并使用HALF_DOWN模式进行舍入。
        BigDecimal c = number.setScale(4, RoundingMode.HALF_DOWN);
        System.out.println("HALF_DOWN: c = " + c);


        //4.描述: 编写一个方法,接受一个BigDecimal类型的金额,保留三位小数,并使用UP模式进行舍入。
        BigDecimal d = number.setScale(3, RoundingMode.UP);
        System.out.println("UP: d = " + d);

        //5.描述: 编写一个方法,接受一个BigDecimal类型的金额,保留一位小数,并使用DOWN模式进行舍入。
        BigDecimal e = number.setScale(1, RoundingMode.DOWN);
        System.out.println("DOWN: e = " + e);
    }

    String getLocaleMoney(BigDecimal number) {
        //1.描述: 编写一个方法,接受一个BigDecimal类型的金额和一个Locale对象,返回格式化的货币字符串。
        NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.getDefault());
        String format = numberFormat.format(number);
        System.out.println("format = " + format);
        return format;
    }

    /**
     * @description 格式化美元格式
     * @params [number]
     * @return java.lang.String
     * @author 军哥
     * @date 2025/6/24 18:40
     */
    String getUsLocaleMoney(BigDecimal number) {
        //2.描述: 编写一个方法,接受一个BigDecimal类型的金额,返回美国格式的货币字符串(例如:$1,234.56)。
        NumberFormat numberFormat1 = NumberFormat.getCurrencyInstance(Locale.US);
        String format1 = numberFormat1.format(number);
        System.out.println("美国格式 = " + format1);
        return format1;
    }

    String getUrLocaleMoney(BigDecimal number) {
        //3.描述: 编写一个方法,接受一个BigDecimal类型的金额,返回欧元格式的货币字符串(例如:€1.234,56)。

        NumberFormat numberFormat2 = NumberFormat.getCurrencyInstance(Locale.GERMANY);
        String format2 = numberFormat2.format(number);
        System.out.println("欧元格式 = " + format2);
        return format2;
    }

    String getJpLocaleMoney(BigDecimal number) {
        //4.描述: 编写一个方法,接受一个BigDecimal类型的金额,返回日本格式的货币字符串(例如:¥1,234)。
        NumberFormat numberFormat3 = NumberFormat.getCurrencyInstance(Locale.JAPAN);
        String format3 = numberFormat3.format(number);
        System.out.println("日本格式 = " + format3);
        return format3;
    }

    String getCnLocaleMoney(BigDecimal number) {
        //描述: 编写一个方法,接受一个BigDecimal类型的金额,返回中国格式的货币字符串(例如:¥1,234.56)
        NumberFormat numberFormat4 = NumberFormat.getCurrencyInstance(Locale.CHINA);
        String format4 = numberFormat4.format(number);
        System.out.println("中国格式 = " + format4);
        return format4;
    }

    @Test
    public void test3() {
        BigDecimal number = new BigDecimal("3.1415926");
        System.out.println("number = " + number);

        // 默认
        System.out.println(getLocaleMoney(number));
        // 美元
        System.out.println(getUsLocaleMoney(number));
        // 欧元
        System.out.println(getUrLocaleMoney(number));
        // 日本
        System.out.println(getJpLocaleMoney(number));
        // 中国
        System.out.println(getCnLocaleMoney(number));


    }

}