首页 > 其他分享 >自己封装的一些算数工具方法

自己封装的一些算数工具方法

时间:2023-10-21 11:33:30浏览次数:36  
标签:return BigDecimal 封装 static param 算数 dividend 工具 divisor

工作中计算的比较多,自己封装了一些工具方法,感觉还是挺好用的。

package com.yunmeng.iot.common.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * 计算常用工具类
 *
 * @author Linzj
 * @date 2023/3/18/018 16:22
 */
public class MathUtil {

    /**
     * 判断参数是否为0
     *
     * @param num 参数
     * @return 0返回true,反之返回false
     */
    private static boolean isZero(BigDecimal num) {
        return num.compareTo(BigDecimal.ZERO) == 0;
    }


    /**
     * 除法工具方法
     * 有时候用 BigDecimal 除法,被除数是0会/by zero,或者除数是0除了也是0
     *
     * @param divisor  除数
     * @param dividend 被除数
     * @return 结果,四舍五入两位小数
     */
    public static BigDecimal divide(BigDecimal divisor, BigDecimal dividend) {
        if (Objects.isNull(divisor) || Objects.isNull(dividend)) {
            return BigDecimal.ZERO;
        }
        if (isZero(dividend) || isZero(divisor)) {
            return BigDecimal.ZERO;
        }
        return divisor.divide(dividend, 2, RoundingMode.HALF_UP);
    }

    /**
     * 除法工具方法
     * 有时候用 BigDecimal 除法,被除数是0会/by zero,或者除数是0除了也是0
     *
     * @param divisor  除数
     * @param dividend 被除数
     * @return 结果,四舍五入两位小数
     */
    public static BigDecimal divide(BigDecimal divisor, BigDecimal dividend, int scale, RoundingMode roundingMode) {
        if (Objects.isNull(divisor) || Objects.isNull(dividend)) {
            return BigDecimal.ZERO;
        }
        if (isZero(dividend) || isZero(divisor)) {
            return BigDecimal.ZERO;
        }
        return divisor.divide(dividend, scale, roundingMode);
    }


    /**
     * 计算百分比 (保留两位小数)
     *
     * @param divisor  除数
     * @param dividend 被除数
     * @return 百分比
     */
    public static String percentage(BigDecimal divisor, BigDecimal dividend) {
        if (isZero(dividend) || isZero(divisor)) {
            return "0%";
        }
        // 计算百分比
        return divisor.divide(dividend, 4, RoundingMode.HALF_UP)
                .multiply(BigDecimal.valueOf(100))
                .setScale(2, RoundingMode.HALF_UP)
                .toPlainString() + "%";
    }

    /**
     * 统计数量
     */
    public static <T> Long count(Predicate<? super T> predicate, List<T> list) {
        return list.stream()
                .filter(predicate)
                .count();
    }

    /**
     * BigDecimal类型求和
     */
    public static <T> BigDecimal sumBigDecimal(Function<? super T, BigDecimal> function, List<T> list) {
        return list.stream()
                .map(function)
                .filter(Objects::nonNull)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }

    /**
     * Long类型求和
     */
    public static <T> Long sumLong(Function<? super T, Long> function, List<T> list) {
        return list.stream()
                .map(function)
                .filter(Objects::nonNull)
                .reduce(0L, Long::sum);
    }
}

标签:return,BigDecimal,封装,static,param,算数,dividend,工具,divisor
From: https://www.cnblogs.com/Linzj5950/p/17778692.html

相关文章

  • 工具说明书 - DB Browser for SQLite
    https://blog.csdn.net/guoqx/article/details/121761216这里就要介绍一款,可以更加方便直接对SQLite的数据库操作的工具软件:DBBrowserforSQLite。 下载安装:Downloads-DBBrowserforSQLitehttps://sqlitebrowser.org/dl/ 下载64位安装版:DB.Browser.for.SQLite-3.12......
  • jmeter工具介绍
    Jmeter性能测试工具介绍Jmeter的背景介绍Jemter过程类元件介绍Jmeter结果查看类元件介绍Jmeter其他介绍Jmeter背景介绍:ApacheJMeter是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测试。它最初被设计用于Web应用测试但后来扩展到其它测试领域。Jmeter环......
  • Adobe Dimension CC2020 Mac「Dn 三维3D建模工具」汉化版下载
    AdobeDimension2020forMac汉化版是Macos上一款三维3D建模工具,操作非常简单,通过强大的3D工具创建产品模型,可视化品牌形像,包装设计,三维模型等。借助AdobeDimension,图形设计师可以在同一个应用程序中编写,调整和渲染逼真的图像。软件地址:看置顶贴AdobeDimensionCC2020Mac安装方......
  • Adobe Character Animator 2020 Mac「Ch 动画制作工具」中文版
    ch2020mac是款适合设计师们使用的动画制作工具。ch2020mac正式版能够实时将2D人物制成动画的软件,用户可以利用网络摄像头将各种艺术作品转变为动画人物。ch2020mac中用户还可以使用键盘或MIDI设备控制挥手等姿势,支持将动作保存为按钮,让腿部、手臂和头部动画更灵活。软件地址:看置......
  • ArcGIS工具 - 为源工具箱加载与授权
    ArcToobox工具箱是ArcGIS软件的精髓,它包括了分析、编辑、管理、转化、制图等多个类别成百上千个工具,熟悉常见工具的使用也就掌握ArcGIS软件的一大半。但是,实际工作和项目中,有问题批量性、流程性、复杂性问题依然无法解决,因此,为源GIS结合经验开发了以ArcPy为主的自定义工具箱,并不......
  • 深孔加工刀具厂家,超硬工具部上半年销售额稳步提升
    成都工具研究所有限公司的前身是成都工具研究所,于1956年创建于北京,是原机械工业部的直属研究所,是我国机械工业的综合性工具科研机构。公司官网:http://www.ctri.com.cn/公司主要从事精密切削工具、精密测量仪器以及表面改性处理技术的技术研究、产品开发和应用服务。2021年1月至5......
  • 版本管理客户端工具SourceTree
      [使用]1.设置SSH客户端工具>选项 设置OpenSSH, SSH密钥这一栏自然会去选择当前用户下的.ssh目录下的id_rsa这个私钥: ......
  • OpenResty入门之压测篇:压测工具界的 “悍马” wrk 审核中
    在上篇文章每个后端都应该了解的OpenResty入门以及网关安全实战中,我向大家介绍了OpenResty的入门使用是WAF防御实战,这篇文章将给大家继续介绍OpenResty入门之性能测试篇。性能测试是软件开发中不可或缺的一环,它可以帮助我们评估系统的性能、稳定性、可扩展性等指标,为......
  • 【从零学习python 】02. 开发工具介绍及交互式编程及注释详解
    编写Python代码根据我们之前介绍的知识,我们知道,所谓代码其实就是将一段普通文本按照一定的规范编写,然后交给电脑解析并且执行。那既然是一段文本,那我们是否可以直接使用文本编辑器来编码呢?答案是肯定的,但是这样开发起来,效率会很低。一、常见的代码编辑工具实际上,在我们实际工作......
  • 【从零学习python 】05. Python中运用算数运算符进行计算和字符串拼接
    进制现代的计算机和依赖计算机的设备里都用到二进制(即0和1)来保存和表示数据,一个二进制表示一个比特(Bit)。在二进制的基础上,计算机还支持八进制和十六进制这两种进制。除了计算机里的进制以外,我们生活中经常用到的是十进制。Python语言支持二进制、八进制、十六进制以......