数字处理☆

该代码示例展示了如何在Java中使用BigDecimal进行不同类型的数字处理,包括四舍五入策略如半上取整、向下取整、向上取整,以及特殊情况下0.5进制的处理。同时,还提供了检查字符串是否为数字的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数字处理

BigDecimal

// An highlighted block
public static Double roundConvert(BigDecimal val, Integer computeRound){
        BigDecimal result = BigDecimal.ZERO;
        switch (computeRound){
            //保留两位小数四舍五入
            case ComputeRoundConstant.COMPUTE_ROUND1:
                result = val.setScale(2, BigDecimal.ROUND_HALF_UP);
                break;
            //保留一位小数四舍五入
            case ComputeRoundConstant.COMPUTE_ROUND2:
                result = val.setScale(1, BigDecimal.ROUND_HALF_UP);
                break;
            //向下取整
            case ComputeRoundConstant.COMPUTE_ROUND3:
                result = val.setScale(0, BigDecimal.ROUND_DOWN );
                break;
            //向上取整
            case ComputeRoundConstant.COMPUTE_ROUND4:
                result = val.setScale( 0, BigDecimal.ROUND_UP );
                break;
            //0.5进制
            case ComputeRoundConstant.COMPUTE_ROUND5:
                BigDecimal intValue = val.setScale(0,BigDecimal.ROUND_DOWN);
                BigDecimal subValue = val.subtract(intValue);
                BigDecimal scaleHalf = new BigDecimal("0.5");
                if(scaleHalf.compareTo(subValue) == 0){
                    // 以0.5为标准 例如 1.5,那么就是1.5
                    result = val.setScale(1, BigDecimal.ROUND_DOWN);
                }else if(subValue.compareTo(scaleHalf) == 1){
                    // 入参小数位大于0.5,进行入操作;例如 2.56,那么就是3.0
                    result = intValue.add(BigDecimal.ONE).setScale(1, BigDecimal.ROUND_DOWN);
                }else if(subValue.compareTo(scaleHalf) == -1){
                    //0.00情况
                    if(subValue.compareTo(BigDecimal.ZERO) == 0){
                        result = intValue.add(subValue).setScale(1, RoundingMode.FLOOR);
                    }else{
                        // 入参小数位小于0.5,进行0.5操作;例如 1.26,那么就是1.5
                        result = intValue.add(scaleHalf).setScale(1, BigDecimal.ROUND_DOWN);
                    }
                }
                break;
            //整数四舍五入
            case ComputeRoundConstant.COMPUTE_ROUND6:
                result = val.setScale(0, BigDecimal.ROUND_HALF_UP);
                break;
            default:
                log.error("前置费用转换没有匹配到到计算进制");
        }
        return Double.parseDouble(result.toString());
    }
private static Pattern pattern = Pattern.compile("[0-9]*\\.?[0-9]+");

    /**
     * 获取数字小数位数
     * @param bigDecimal  数字值
     * @return Integer
     */
    public static Integer getNumberOfDecimalPlace(BigDecimal bigDecimal) {
        final String str = bigDecimal.toPlainString();
        final int index = str.indexOf('.');
        if (index < 0) {
            return 0;
        }
        return str.length() - 1 - index;
    }

    /**
     * 判断字符串是否是大于0的数字
     * @param str
     * @return boolean
     */
    public static boolean isNumeric(String str){
        Matcher isNum = pattern.matcher(str);
        if (!isNum.matches()) {
            return false;
        }
        return true;
    }




    /**
     * 获取数字小数位数
     * @param bigDecimal  数字值
     * @return Integer
     */
    public static Integer getNumberOfDecimalPlace(BigDecimal bigDecimal) {
        final String str = bigDecimal.toPlainString();
        final int index = str.indexOf('.');
        if (index < 0) {
            return 0;
        }
        return str.length() - 1 - index;
    }


     /**
     * 匹配是否为数字字符串
     */
    private static final String matchNumberStr = "-?[0-9]+.?[0-9]*";

    /**
     * 判断字符串否为数字,可以判断正负、整数小数
     * @param target
     * @return boolean
     */
    public static boolean isNumeric(String target){
        if(StrUtil.isBlank(target)){
            return false;
        }
        return target.matches(matchNumberStr);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值