BigDecimal 校验格式

简介: BigDecimal 校验格式

强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan


【前言】


       最近收到一个需求,在管理后台对系统中的金额进行操作时,对操作的金额需要进行相关校验,如果不校验,在进行相关的计算时就可能会出问题。


【BigDecimal 校验格式】


       一、业务需求


              前端接收到金额传给后端时需要对金额的格式进行校验,校验规则:如果有小数,则小数的位数不能超过两位;如:


               1888          符合要求


               1888.1       符合要求


               1888.12     符合要求


               1888.123   不符合要求                


       二、相关代码及相应测试


              1、代码


                 (1)工具类


/*
 * Copyright (c) 2019. zhanghan_java@163.com All Rights Reserved.
 * 项目名称:实战SpringBoot
 * 类名称:MoneyUtil.java
 * 创建人:张晗
 * 联系方式:zhanghan_java@163.com
 * 开源地址: https://github.com/dangnianchuntian/springboot
 * 博客地址: https://zhanghan.blog.csdn.net
 */
package com.zhanghan.zhboot.util;
import java.util.regex.Pattern;
public class MoneyUtil {
    //两位小数金额校验
    public static boolean judgeTwoDecimal(Object obj) {
        boolean flag = false;
        try {
            if (obj != null) {
                String source = obj.toString();
                // 判断是否是整数或者是携带一位或者两位的小数
                Pattern pattern = Pattern.compile("^[+]?([0-9]+(.[0-9]{1,2})?)$");
                if (pattern.matcher(source).matches()) {
                    flag = true;
                }
            }
        } catch (Exception e) {
            e.getMessage();
        }
        return flag;
    }
}


                 (2)测试的Request


/*
 * Copyright (c) 2019. zhanghan_java@163.com All Rights Reserved.
 * 项目名称:实战SpringBoot
 * 类名称:CheckMoneyRequest.java
 * 创建人:张晗
 * 联系方式:zhanghan_java@163.com
 * 开源地址: https://github.com/dangnianchuntian/springboot
 * 博客地址: https://zhanghan.blog.csdn.net
 */
package com.zhanghan.zhboot.controller.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@ApiModel("校验金额演示请求实体")
@Data
public class CheckMoneyRequest {
    @ApiModelProperty(value = "金额")
    private BigDecimal money;
}


                 (3)测试Controller


/*
 * Copyright (c) 2019. zhanghan_java@163.com All Rights Reserved.
 * 项目名称:实战SpringBoot
 * 类名称:CheckMoneyController.java
 * 创建人:张晗
 * 联系方式:zhanghan_java@163.com
 * 开源地址: https://github.com/dangnianchuntian/springboot
 * 博客地址: https://zhanghan.blog.csdn.net
 */
package com.zhanghan.zhboot.controller;
import com.zhanghan.zhboot.controller.request.CheckMoneyRequest;
import com.zhanghan.zhboot.util.MoneyUtil;
import com.zhanghan.zhboot.util.wrapper.WrapMapper;
import com.zhanghan.zhboot.util.wrapper.Wrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
@RestController
@Api(value = "演示校验金额控制器", tags = {"演示校验金额控制器"})
public class CheckMoneyController {
    @ApiOperation(value = "演示金额校验", tags = {"演示校验金额控制器"})
    @RequestMapping(value = "/check/money", method = RequestMethod.POST)
    public Wrapper lombok(@RequestBody CheckMoneyRequest checkMoneyRequest) {
        BigDecimal money = checkMoneyRequest.getMoney();
        //校验金额是否符合要求
        boolean legal = MoneyUtil.judgeTwoDecimal(money);
        Map<String, Object> map = new HashMap();
        map.put("money", money);
        map.put("islegal",legal);
        return WrapMapper.ok(map);
    }
}


              2、测试结果


                 (1)符合条件:


5ccdb33e989c8656c8869fab6800b1bc_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ2hhbi5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70.png


                 (2)不符合条件


0a6682d0da3b73df82cbb4be62a4e1ad_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ2hhbi5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70.png

 

【总结】


       1、金额一定要有检验,不然进入系统中不符合要求的数据,在进行相关计算的时候会出问题,有时每笔订单只差几分但是订单量多了,差的钱就多了;


       2、做程序需时刻谨慎,什么时候都不可大意。


相关文章
|
7月前
|
数据采集 Java 数据格式
【Java】正则表达式,校验数据格式的合法性。
【Java】正则表达式,校验数据格式的合法性。
137 0
|
Java API
BigDecimal类型讲解
如何在Java中使用BigDecimal数字类型,你真的掌握了嘛??
129 0
|
3月前
|
Java 数据库连接 测试技术
自定义校验注解,优雅的实现手机号,身份证号的格式校验!
本文介绍了如何创建自定义校验注解来实现手机号和身份证号的格式校验,包括定义注解、实现校验逻辑、将注解应用于模型类,以及常用的校验器库和框架,旨在提高代码的可维护性和减少重复的校验逻辑。
|
5月前
|
Java
Java中将保留四位小数的Double转换为String的方法详解
选择合适的方法,可以使代码更加简洁、高效,同时也能满足不同场景下的需求。
80 5
枚举的使用及校验
枚举的使用及校验
66 0
|
JSON Java 数据格式
java校验json的格式是否符合要求
java校验json的格式是否符合要求 在日常开发过程中,会有这样的需求,校验某个json是否是我们想要的数据格式,json-schema-validator使用
668 0
|
7月前
|
Java API
使用 BigDecimal 的正确方式
使用 BigDecimal 的正确方式
94 1
|
7月前
BigDecimal常用示例
BigDecimal常用示例
66 1
|
7月前
|
数据格式 Python
添加 常用校验方法,校验常见数据格式
添加 常用校验方法,校验常见数据格式
70 0
|
Java
Java:String.format格式化浮点数保留指定小数位输出字符串
Java:String.format格式化浮点数保留指定小数位输出字符串
295 0