java将数字格式化为万或者以亿为单位

       在我们项目开发时会遇到这样一种情况,即后台返回的数额过大而导致前端无法正常显示,如超过万、亿级,这时候可以在后台做一个判断若数据大于一万以上,则将数字转换为万或者以亿为单位再返回。

       以下为转换方法类,其中包含三个方法,主方法 amountConversion() 实现数字转换为万或者亿为单位、formatNumber()用于对数字进行四舍五入保证转换后的数据准确性、zeroFill()用于对数字进行补零此方法可根据实际需求酌情使用。

import java.math.BigDecimal;
import java.math.RoundingMode;
import org.slf4j.Logger;
public class NumberUtils {
   
    private static final Double MILLION = 10000.0;
    private static final Double MILLIONS = 1000000.0;
    private static final Double BILLION = 100000000.0;
    private static final String MILLION_UNIT = "万";
    private static final String BILLION_UNIT = "亿";
    
    /**
     * 将数字转换成以万为单位或者以亿为单位,因为在前端数字太大显示有问题
     *
     * @author
     * @version 1.00.00
     *
     * @date 2018年1月18日
     * @param amount 报销金额
     * @return
     */
    public static String amountConversion(double amount){
        //最终返回的结果值
        String result = String.valueOf(amount);
        //四舍五入后的值
        double value = 0;
        //转换后的值
        double tempValue = 0;
        //余数
        double remainder = 0;
        
        //金额大于1百万小于1亿
        if(amount > MILLIONS && amount < BILLION){
            tempValue = amount/MILLION;
            remainder = amount%MILLION;
            log.info("tempValue=" + tempValue + ", remainder=" + remainder);
            
            //余数小于5000则不进行四舍五入
            if(remainder < (MILLION/2)){
                value = formatNumber(tempValue,2,false);
            }else{
                value = formatNumber(tempValue,2,true);
            }
            //如果值刚好是10000万,则要变成1亿
            if(value == MILLION){
                result = zeroFill(value/MILLION) + BILLION_UNIT;
            }else{
                result = zeroFill(value) + MILLION_UNIT;
            }
        }
        //金额大于1亿
        else if(amount > BILLION){
            tempValue = amount/BILLION;
            remainder = amount%BILLION;
            log.info("tempValue=" + tempValue + ", remainder=" + remainder);
            
            //余数小于50000000则不进行四舍五入
            if(remainder < (BILLION/2)){
                value = formatNumber(tempValue,2,false);
            }else{
                value = formatNumber(tempValue,2,true);
            }
            result = zeroFill(value) + BILLION_UNIT;
        }else{
            result = zeroFill(amount);
        }
        log.info("result=" + result);
        return result;
    }
    
    
    /**
     * 对数字进行四舍五入,保留2位小数
     *
     * @author
     * @version 1.00.00
     *
     * @date 2018年1月18日
     * @param number 要四舍五入的数字
     * @param decimal 保留的小数点数
     * @param rounding 是否四舍五入
     * @return
     */
    public static Double formatNumber(double number, int decimal, boolean rounding){
        BigDecimal bigDecimal = new BigDecimal(number);
        
        if(rounding){
            return bigDecimal.setScale(decimal,RoundingMode.HALF_UP).doubleValue();
        }else{
            return bigDecimal.setScale(decimal,RoundingMode.DOWN).doubleValue();
        }
    }
    
    /**
     * 对四舍五入的数据进行补0显示,即显示.00
     *
     * @author
     * @version 1.00.00
     *
     * @date 2018年1月23日
     * @return
     */
    public static String zeroFill(double number){
        String value = String.valueOf(number);
        
        if(value.indexOf(".")<0){
            value = value + ".00";
        }else{
            String decimalValue = value.substring(value.indexOf(".")+1);
            
            if(decimalValue.length()<2){
                value = value + "0";
            }
        }
        return value;
    }
    
    /**
     * 测试方法入口
     *

         * @author

     * @version 1.00.00
     *
     * @date 2018年1月18日
     * @param args
     */
    public static void main(String[] args) throws Exception{
        amountConversion(120);
        amountConversion(18166.35);
        amountConversion(1222188.35);
        amountConversion(129887783.5);
    }
    
    
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值