【工具类】计算机字节数转换为人类可读的大小

最近公司要做对象存储平台,从MINIO拿到的文件大小都是long类型的byte,于是,需要如下工具类

package cn.xdf.xadd.utils;

import java.math.BigDecimal;

/**
 * 计算文件大小工具类
 *
 * @author zhurunhua
 * @since 2020-11-03 17:04
 */
public enum FileSizeUtil {
    /**
     * 单例
     */
    SINGLETON;

    private static final String BYTE = "字节";
    private static final String KB = "KB";
    private static final String MB = "MB";
    private static final String GB = "GB";
    private static final long KB_SIZE = 1024;
    private static final long MB_SIZE = 1048576;
    private static final long GB_SIZE = 1073741824;

    /**
     * 获取文件大小
     *
     * @param size 字节长度
     * @return java.lang.String
     * @date 1/22/21 6:33 PM
     */
    public String getHumanSize(long size) {
        String humanSize;
        //字节
        if (size < KB_SIZE) {
            humanSize = size + BYTE;
            return humanSize;
        }
        //KB
        else if (size < MB_SIZE) {
            humanSize = getQuotient(size, KB_SIZE, 2) + KB;
            return humanSize;
        }
        //MB
        else if (size < GB_SIZE) {
            humanSize = getQuotient(size, MB_SIZE, 2) + MB;
            return humanSize;
        }
        //GB
        else {
            humanSize = getQuotient(size, GB_SIZE, 2) + GB;
        }
        return humanSize;
    }

    /**
     * 获取两数之商,四舍五入,保留指定小数位
     *
     * @param dividend 被除数
     * @param divisor  除数
     * @param scale    保留小数位
     * @return java.lang.Double
     * @date 1/22/21 7:44 PM
     */
    public Double getQuotient(long dividend, long divisor, int scale) {
        return BigDecimal.valueOf((double) dividend / divisor).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }


}

不知道是否有更优写法,先凑活用吧

使用方法:

    public static void main(String[] args) {
        String humanSize = FileSizeUtil.SINGLETON.getHumanSize(12345678L);
        System.out.println(humanSize);
    }

输出:

OVER.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值