首页 > 其他分享 >单位转换、保留小数、计算百分比【工具类】

单位转换、保留小数、计算百分比【工具类】

时间:2024-07-04 18:08:23浏览次数:16  
标签:百分比 return num1 num2 rate amount 转换 小数 BigDecimal

实际开发中,经常会遇到单位转换、保留小数、计算百分比的场景,下面是我自己写的并实际使用的工具类,希望能帮到大家或者给大家参考

该工具类包括:

  • 单位转换成万或亿
  • 保留两位小数
  • 计算百分比,保留两位小数
  • 计算百分比,保留两位小数,若有效数字为0,则往后取到第一个不为零的
  • 计算百分比,保留整数
public class NumberUtil {
    /**
     * 转换为亿
     * @param amount
     * @return
     */
    public static BigDecimal formatToYI(BigDecimal amount) {
        if (amount == null) {
            return new BigDecimal(0);
        }
        return amount.divide(new BigDecimal(100000000), 2, BigDecimal.ROUND_HALF_UP);
    }
    /**
     * 转换为万
     * @param amount
     * @return
     */
    public static BigDecimal formatToWAN(BigDecimal amount) {
        if (amount == null) {
            return new BigDecimal(0);
        }
        return amount.divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP);
    }
    
    /**
     * 转成万或亿
     * @param amount
     * @return
     */
    public static String formatToWanOrYi(BigDecimal amount) {
        if (amount == null) {
            return "0";
        }
        if (amount.compareTo(new BigDecimal(10000000)) < 0) {
            //如果小于1亿
            return amount.divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString() + "万";
        }
        return amount.divide(new BigDecimal(100000000), 2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString() + "亿";
    }
    
    /**
     * 保留两位小数
     * @param amount
     * @return
     */
    public static BigDecimal formatTwo(BigDecimal amount) {
        if (amount == null) {
            return new BigDecimal(0);
        }
        return amount.setScale(2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 计算百分比 保留两位小数
     * @param num1
     * @param num2
     * @return
     */
    public static String getPercent(long num1, long num2) {
        String rate = "0.00%";
        String format = "0.00";
        if (num1 != 0 && num2 != 0) {
            DecimalFormat dec = new DecimalFormat(format);
            rate = dec.format((double) num1 / num2*100) + "%";
        } else if (num1 != 0 && num2 == 0) {
            rate = "100.00%";
        }

        return rate;
    }
    
    /**
     * 计算百分比 保留两位小数
     * @param num1
     * @param num2
     * @return
     */
    public static String getPercent(BigDecimal num1, BigDecimal num2) {
        String rate = "0.00%";
        String format = "0.00";
        if (num1.intValue() != 0 && num2.intValue() != 0) {
            DecimalFormat dec = new DecimalFormat(format);
            rate = dec.format(num1.divide(num2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).doubleValue()) + "%";
        } else if (num1.intValue() != 0 && num2.intValue() == 0) {
            rate = "100.00%";
        }

        return rate;
    }
    /**
     * 计算百分比,保留两位小数,若有效数字为0,则往后取到第一个不为零的
     * @param num1
     * @param num2
     * @return
     */
    public static String getPercentPro(long num1, long num2) {
        String rate = "0.00%";
        String format = "0.00";
        if (num1 != 0 && num2 != 0) {
            double v = (double) num1 / num2 * 100;
            if (v >= 0.01) {
                DecimalFormat dec = new DecimalFormat(format);
                rate = dec.format(v) + "%";
            } else {
                while (true) {
                    DecimalFormat dec = new DecimalFormat(format);
                    String format1 = dec.format(v);
                    if (Double.parseDouble(format1) > 0) {
                        rate = format1 + "%";
                        break;
                    } else {
                        format = format + "0";
                    }
                }
            }
        } else if (num1 != 0 && num2 == 0) {
            rate = "100.00%";
        }

        return rate;
    }

    /**
     * 计算百分比 保留整数
     * @param num1
     * @param num2
     * @return
     */
    public static String getPercentNoPoint(BigDecimal num1, BigDecimal num2) {
        String rate = "0%";
        String format = "0";
        if (num1.intValue() != 0 && num2.intValue() != 0) {
            DecimalFormat dec = new DecimalFormat(format);
            rate = dec.format(num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).doubleValue()) + "%";
        } else if (num1.intValue() != 0 && num2.intValue() == 0) {
            rate = "100%";
        }

        return rate;
    }

标签:百分比,return,num1,num2,rate,amount,转换,小数,BigDecimal
From: https://www.cnblogs.com/GilbertDu/p/18245961

相关文章

  • torch.tensor、numpy.array、list三者之间互相转换
    torch.tensor、numpy.array、list三者之间互相转换1.1list转numpyndarray=np.array(list)1.2numpy转listlist=ndarray.tolist()2.1list转torch.Tensortensor=torch.Tensor(list)2.2torch.Tensor转list先转numpy,后转listlist=tensor.numpy().tolist(......
  • 最有效的ResultSet转换为JSON?
    最有效的ResultSet转换为JSON? 原文链接: https://cloud.tencent.com/developer/information/%E6%9C%80%E6%9C%89%E6%95%88%E7%9A%84ResultSet%E8%BD%AC%E6%8D%A2%E4%B8%BAJSON%EF%BC%9F-article最有效的ResultSet转换为JSON的方法是使用Java中的Jackson库。Jackson是一个......
  • 获取请求响应的进度百分比,两种方法
            前段时间做了loading动画,增加用户体验,不至于请求时间误认为程序卡死。后来发现当网络不好或者数据过大时,请求时间比较长,没有返回完结果之前,loading一直在加载,于是改做成百分比显示进度,让客户实时感觉到程序在运行。就像下面这样。本文用两种请求方法'Xhr'......
  • 有哪些方法可以将pdf转换成ppt ?
    众所周知,PPT文件是一种用于演示的文件,有时候为了帮助演示,我们还会打开一些其它的文件,比如PDF文件。在把pdf转ppt简单方法的过程中,不必反复打开其它文件。许多人都不知道怎么免费把pdf转换成ppt的方法,今天小编就借着这个转换方法给大家分享一下。PDF转PPT的两种快速方法,大家可以选......
  • 巴图自动化PN转Modbus RTU协议转换网关模块快速配置
    工业领域中常用的通讯协议有:Profinet协议,Modbus协议,ModbusTCP协议,Profibus协议,ProfibusDP协议,EtherCAT协议,EtherNET协议,CAN,CanOpen等,它们在自动化控制系统中发挥着重要作用。由于现实工业场景中存在Profinet协议设备和Modbus协议设备进行通讯的情况,将Modbus协议转换为Profinet协......
  • SciTech-EECS-ADC/DAC: 源自Digikey的模数/数模转换文章:原理、类型、特点、应用、推
    ADC/DAC教程作者:PatSagsveen,投稿人:DigiKey,2017-09-13https://www.digikey.cn/zh/articles/adc-dac-tutorial如今的世界充满着各种数字信号和模拟信号。这些信号表现不同,但通常都被用来帮助实现更大的目标。ADC:想象你是负责控制HVAC装置的工程师。无论你打算使......
  • 模拟集成电路设计系列博客——8.4.2 时间-数字转换器
    8.4.2时间-数字转换器在上一节我们介绍了TDC的一种典型实现,即单延时链TDC,通过\(2^N\)的延迟单元和D触发器可以实现Nbit的时间数字转换功能,但这种结构的分辨率受到延迟单元的最小延迟时间限制,即:\[LSB=\tau_{delay}=\frac{T}{2^N}\tag{8.4.10}\]其中\(T\)为TDC的最大量程,\(\ta......
  • 学习笔记485—Excel技巧:一键将文本数字转换为数值
    Excel技巧:一键将文本数字转换为数值在使用Excel进行数据处理时,经常会遇到数据格式不匹配的问题。特别是当从外部导入数据或手动输入数据时,数字可能会被误识别为文本格式,这在进行数据计算和分析时会带来诸多不便。幸运的是,Excel提供了一些便捷的方法,可以帮助我们一键将文本转换为......
  • 24位PCM采样数据和16位相互转换算法实例解析
    一概念1.24bit音频:24bit指使用3个字节记录振幅值,意味可以记录16,777,216种声音振幅的变化,动态范围可达144dB(人耳听觉的动态范围是120dB,超过120dB人耳会痛,所以120dB又称痛阀)。下面是三种常见的音频采样比对表: 2.24位一般是采样深度的概念,还有一......
  • 用于通信设备测试和测量: ADS8900BRGER、ADS54J20IRMP、ADC12DJ3200AAV模数转换器ADC
    1、ADC12DJ3200AAV 12位双通道3.2GSPS或单通道6.4GSPS射频采样模数转换器ADCADC12DJ3200采用具有多达16个串行通道和子类1兼容性的高速JESD204B输出接口,可实现确定性延迟和多器件同步。特性•ADC内核:–12位分辨率–单通道模式下采样率高达6.4GSPS–双通......