首页 > 编程语言 >Java 金额计算公共方法

Java 金额计算公共方法

时间:2024-09-13 17:51:28浏览次数:3  
标签:return BigDecimal 金额 param static str 公共 Java public

public class MathUtils {

    private static final int DEF_DIV_SCALE = 32;

    /**
     * 转为BigDecimal
     *
     * @param obj
     */
    public static BigDecimal toBigDecimal(Object obj) {
        String str = String.valueOf(obj);
        return stringToBigDecimal(str);
    }

    /**
     * 字符串转为BigDecimal
     *
     * @param str
     */
    public static BigDecimal stringToBigDecimal(String str) {
        if (StringTool.isNull(str)) {
            str = "0";
        }
        return new BigDecimal(str);
    }

    /**
     * BigDecimal数值相加
     *
     * @param bigDecimals
     * @return
     */
    public static BigDecimal add(BigDecimal... bigDecimals) {
        BigDecimal bigDecimal = new BigDecimal(0);
        for (BigDecimal decimal : bigDecimals) {
            bigDecimal = bigDecimal.add(decimal);
        }
        return bigDecimal;
    }

    /**
     * 任何类型数值相加
     *
     * @param objects
     * @return
     */
    public static BigDecimal add(Object... objects) {
        int arrayLength = objects.length;
        String[] stringArray = new String[arrayLength];
        for (int i = 0; i < arrayLength; i++) {
            stringArray[i] = String.valueOf(objects[i]);
        }
        return add(stringArray);
    }

    /**
     * 字符串形式的数值相加
     *
     * @param strs
     * @return
     */
    public static BigDecimal add(String... strs) {
        BigDecimal bigDecimal = new BigDecimal(0);
        for (String str : strs) {
            bigDecimal = bigDecimal.add(stringToBigDecimal(str));
        }
        return bigDecimal;
    }

    /**
     * 两数相减
     *
     * @return
     */
    public static double subtract(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 相减
     *
     * @return
     */
    public static BigDecimal subtract(String... strs) {
        BigDecimal str0 = new BigDecimal(strs[0]);
        for (int i = 1; i < strs.length; i++) {
            str0 = str0.subtract(stringToBigDecimal(strs[i]));
        }
        return str0;
    }

    /**
     * BigDecimal类型两数相除
     *
     * @param bigDecimal1 除数
     * @param bigDecimal2 被除数
     * @return
     */
    public static BigDecimal divide(BigDecimal bigDecimal1, BigDecimal bigDecimal2) {
        return bigDecimal1.divide(bigDecimal2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * BigDecimal类型和int类型两数相除
     *
     * @param bigDecimal
     * @param number
     * @return
     */
    public static BigDecimal divide(BigDecimal bigDecimal, int number) {
        return divide(bigDecimal, new BigDecimal(number));
    }

    /**
     * 字符串类型和int类型两数相除
     *
     * @param str    字符串类型和int类型两数相除
     * @param number
     * @return
     */
    public static BigDecimal divide(String str, int number) {
        if (str.isEmpty()) {
            str = "0";
        }
        return divide(stringToBigDecimal(str), number);
    }

    /**
     * BigDecimal类型两数相乘
     *
     * @param bigDecimal1
     * @param bigDecimal2
     * @return
     */
    public static BigDecimal multiply(BigDecimal bigDecimal1, BigDecimal bigDecimal2) {
        return bigDecimal1.multiply(bigDecimal2);
    }

    /**
     * BigDecimal类型和int类型两数相乘
     *
     * @param bigDecimal1
     * @param number
     * @return
     */
    public static BigDecimal multiply(BigDecimal bigDecimal1, int number) {
        return multiply(bigDecimal1, new BigDecimal(number));
    }

    /**
     * 字符串类型和int类型两数相乘
     *
     * @param str
     * @param number
     * @return
     */
    public static BigDecimal multiply(String str, int number) {
        if (str.isEmpty()) {
            str = "0";
        }
        return multiply(stringToBigDecimal(str), number);
    }

    /**
     * 比较两个数的大小
     *
     * @param bg1 参数1
     * @param bg2 参数2
     * @return -1 bg1 < bg2;0 bg1 = bg2;1 bg1 > bg2
     */
    public static int compare(BigDecimal bg1, BigDecimal bg2) {
        return bg1.compareTo(bg2);
    }

    /**
     * 比较两个字符串形式数的大小
     *
     * @param str1 参数1
     * @param str2 参数2
     * @return -1 bg1 < bg2;0 bg1 = bg2;1 bg1 > bg2
     */
    public static int compare(String str1, String str2) {
        return compare(stringToBigDecimal(str1), stringToBigDecimal(str2));
    }

    /**
     * 获取日利息(根据利率和天数计算日利息,金额*利率/100/365*天数)
     *
     * @param amount       金额
     * @param interestRate 利率 (百分制)
     * @return 日利息
     */
    public static BigDecimal getDailyInterest(BigDecimal amount, BigDecimal interestRate) {
        BigDecimal interest = MathUtils.divide(MathUtils.multiply(amount, interestRate), 100); //年利息=金额*利率/100
        BigDecimal dailyInterest = MathUtils.divide(interest, 365); //日利息=年利息/365
        return dailyInterest;
    }

    /**
     * 获取利息
     *
     * @param amount       金额
     * @param interestRate 利率 (百分制)
     * @param days         天数
     * @return 利息
     */
    public static BigDecimal getInterest(BigDecimal amount, BigDecimal interestRate, int days) {
        BigDecimal interest = MathUtils.multiply(getDailyInterest(amount, interestRate), days); //日利息*天数
        return interest;
    }

}

标签:return,BigDecimal,金额,param,static,str,公共,Java,public
From: https://blog.51cto.com/u_15406246/12004716

相关文章

  • 基于Java中的SSM框架实现校园招聘信息管理系统项目【项目源码+论文说明】计算机毕业设
    基于java中的SSM框架实现校园招聘信息管理系统平台演示【内附项目源码+LW说明】摘要随着我国近年来高校不断的进行扩招,2022年全国高校的毕业生人数已经超过一千万人,而在这个时代的大学生早已不像上世纪八九十年代一样,毕业就可以分配工作,所以在当今这个时代毕业生找工作是......
  • Java Script - Web Api
    变量声明有3个ver、let和const。建议const优先,其次为let。constarr=['red','pink']arr.push('blue')arr=[1,2,4]arr.push(5)//错误,arr为const1、WebApi基本认知1.1、作用和分类作用:就是使用j......
  • Java超详细知识点——I/O流(字节流和字符流)
    File类:JavaAPI:java.io.File类是用来操作文件或文件夹的,无法用来读写1.首先创建一下file的对象:里面可以写相对路径或者绝对路径Filefile=newFile("CCC.java");也可以使用其他构造方法//Stringpath="D:\\ch06";//StringfileName="1.txt";Filefile=new......
  • Java 是值传递还是引用传递,又是怎么体现的?
    一、基本概念值传递是指在方法调用时,将实际参数的值复制一份传递给方法的形式参数。对形式参数的修改不会影响实际参数的值。引用传递则是将实际参数的引用(内存地址)传递给方法的形式参数,在方法中对形式参数所指向的对象进行修改会影响到实际参数所指向的对象。二、Java中的......
  • 基于Java部门办公网站系统的设计与开发的计算机毕设
    摘 要本次课程设计主要是针对于学校教研信息的登记管理归档根据实际工作流程做出适合实际工作的,能够减少工作流程的工作量,有效的提高工作效率的网站系统。本次设计在开始的前台界面设计时主要是使用DIV+CSS布局样式,设计时能灵活准确的定位每一个模块的位置,在程序语言上使用的是ja......
  • JAVA国际版同城服务系统:满足全球用户需求的解决方案
    随着全球化的加速和互联网的普及,人们对同城服务的需求日益增长,要求也越来越高。为了满足全球用户的需求,JAVA国际版同城服务系统应运而生。该系统以JAVA技术为核心,致力于提供高效、稳定、安全的服务,让用户在全球任何角落都能享受到贴心、便捷的同城服务。JAVA国际版同城服务系统采用......
  • 白骑士的Java教学介绍篇 1.1 Java简介
            欢迎来到Java编程的世界!无论你是编程新手还是有一定经验的开发者,学习Java都将为你打开一个广阔的编程领域。Java作为一种功能强大且广泛使用的编程语言,自诞生以来便以其平台无关性、面向对象的特性和丰富的生态系统赢得了全球开发者的青睐。在本篇博客中,我们将......
  • 基于JAVA超市管理系统的计算机毕设
    目录摘要Abstract1绪论1.1社会背景1.2超市背景1.3系统开发背景1.4课题研究的目的和意义1.5系统功能特点1.6本文主要工作2系统可行性研究2.1技术可行性研究2.1.1采用java语言编写2.1.2采用Eclipse开发平台2.1.3采用Access数据库2.2经济可行性研究2.3操作可行性研究3......
  • 什么是Java 语法糖?
    Java语法糖(syntacticsugar)是指一些方便开发者使用的语法形式,它们在编译时会被转换为更加基础或复杂的代码。语法糖的目的在于简化代码编写,提高代码的可读性和可维护性,而不会改变程序的功能或性能。以下是几个Java中常见的语法糖示例:增强的for循环(for-each)int[]numbers......
  • Day08.Java数组
    Java数组数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排序组合而成其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们数组的声明和创建首先必须声明数组变量,才能在声明中使用数组dataType[]array......