BigDecimal 校验格式

BigDecimal 校验格式强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】最近收到一个需求,在管理后台对系统中的金额进行操作时,对操作的金额需要进行相关校验,如果不校验,在进行相关的计算时就可能会出问题。【BigDecimal校验格式】一、业务需求前端接收到金额传给后端时需要对金…

大家好,又见面了,我是你们的朋友全栈君。

强烈推荐一个大神的人工智能的教程:http://www.captainbed.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)符合条件:

BigDecimal 校验格式

                  (2)不符合条件

BigDecimal 校验格式

         

【总结】

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145024.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql数据库创建表_eclipse怎么导入jdbc驱动

    mysql数据库创建表_eclipse怎么导入jdbc驱动承接上一篇,MySQL我们已经安装OK了,那么怎么可以不去玩玩它呢!!学习重点:一:CMD登入退出命令:二:MySQL数据库服务器、数据库和表的关系三:数据库的指令操作四:表的常用指令操作

    2022年8月2日
    5
  • 强化学习之模仿学习

    强化学习之模仿学习原文链接:https://blog.csdn.net/weixin_37895339/article/details/82863379前文是一些针对IRL,IL综述性的解释,后文是针对《Generativeadversarialimitationlearning》文章的理解及公式的推导。通过深度强化学习,我们能够让机器人针对一个任务实现从0到1的学习,但是需要我们定义出reward函数,在很多复杂任务,例如无人驾驶中,很难根据状态特征来建立一个科学合理的reward。人类学习新东西有一个重要的

    2022年9月19日
    5
  • 使能DHCP Relay_option键的作用

    使能DHCP Relay_option键的作用DHCP一家子(不包括DHCPv6)包括DHCPClient、DHCPServer、DHCPRelay以及DHCPSnooping,之后我会一个个详细学习之后发出来。今天讲述一下DHCPrelay,之前先学习的DHCPSever,还没来得及整理,之后会发出来,今天先说说DHCPRelay。DHCPRelay(DHCP中继),也叫作DHCPAgent,主要用于DHCPClient和DHCPServer不在一个网段时,DHCPClient又有自动地址分配的请…

    2022年10月15日
    4
  • mapminmax数据归一化(第一次完整看好help文档)

    mapminmax数据归一化(第一次完整看好help文档)mapminmax一、[Y,PS]=mapminmax(X)函数功能:将矩阵的每一行压缩到[-1,1],其中当前行的最大值变为1,最小值变为-1。(这是默认的参数)扩展:(修改参数)1.[Y,PS]=mapminmax(X,YMIN,YMAX)将矩阵的每一行压缩到[YMIN,YMAX],其中当前行的最大值变为YMAX,最小值变为YMIN。2. [Y,

    2022年6月20日
    59
  • android中ListView的用法[通俗易懂]

    android中ListView的用法[通俗易懂]地址:https://www.cnblogs.com/s-y-j/p/6548032.htmlLisView介绍:(一)、ListView概念:ListView是Android中最重要的组件之

    2022年7月1日
    23
  • 双亲委派机制及打破双亲委派示例

    双亲委派机制在加载类的时候,会一级一级向上委托,判断是否已经加载,从自定义类加载器-》应用类加载器-》扩展类加载器-》启动类加载器,如果到最后都没有加载这个类,则回去加载自己的类。双亲委托有个弊端:不能向下委派,不能不委派怎么打破双亲委派机制:(也就是能向下委派和不委派)自定义类加载器(不委派)spi机制(向下委派)打破双亲委派打破双亲委派的两种方式:1.通过spi机制,使用ServiceLoader.load去加载2.通过自定义类加载器,继承classloade

    2022年4月8日
    939

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号