Date、BigDecimal类型值转换

Date、BigDecimal类型值转换

前端输入:

json 复制代码
{
  "dueDate": "2025-12-21 12:32:44",		
  "name": "艾伦",
  "payMethod": "1",
  "price": 120.235,
  "rate": 0.043453,
  "time1": "2025/09/01"
}
java 复制代码
@Data
public class ConvertRequest {

    private String name;

    @JsonFormat(pattern = "yyyy/MM/dd")
    private Date time1;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dueDate;

    private BigDecimal price;

    private BigDecimal rate;

    private String payMethod;
}

后端输出:

json 复制代码
{
  "code": 1,
  "msg": null,
  "data": {
    "name": "艾伦",
    "time1": 1756684800000,
    "dueDate": "2025-12-21 12:32:44",
    "price": "120.24",
    "rate": "4.35%",
    "payMethod": "一次性还清"
  }
}
java 复制代码
@Data
public class ConvertResponse {

    private String name;

    private Date time1;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dueDate;

    private String price;

    private String rate;

    private String payMethod;
}

数据库表:

sql 复制代码
CREATE TABLE `t_convert_test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  `due_date` datetime DEFAULT NULL,
  `price` decimal(18,4) DEFAULT NULL,
  `rate` decimal(18,7) DEFAULT NULL,
  `pay_method` varchar(2) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
java 复制代码
@Data
public class ConvertBO {

    private int id;

    private String name;

    private Date dueDate;

    private BigDecimal price;

    private BigDecimal rate;

    private String payMethod;

    private Date createTime;

    /**
     * 格式化价格为两位小数(四舍五入)
     * @param price 价格值
     * @return 格式化后的价格字符串
     */
    public static String formatPrice(BigDecimal price) {
        if (price == null) {
            return "0.00";
        }
        return price.setScale(2, RoundingMode.HALF_UP).toString();
    }

    /**
     * 格式化利率为百分比格式,保留两位小数(四舍五入)
     * @param rate 利率值(例如:0.1256 表示 12.56%)
     * @return 格式化后的百分比字符串
     */
    public static String formatRate(BigDecimal rate) {
        if (rate == null) {
            return "0.00%";
        }

        // 将利率乘以100转换为百分比
        BigDecimal percentage = rate.multiply(new BigDecimal("100"));
        // 保留两位小数并四舍五入
        percentage = percentage.setScale(2, RoundingMode.HALF_UP);

        return percentage.toString() + "%";
    }
}

表数据:

txt 复制代码
"id"	"name"	  "due_date"	         "price"	 "rate"	      "pay_method"	"create_time"
"1"		"沃德"	 "2025-09-04 21:47:13"	"19.9900"	"3.3200000"	  "1"	       "2025-09-02 21:47:31"
"2"		"沃克"	 "2025-09-11 20:32:44"	"20.0400"	"0.4300000"   "2"	       "2025-09-06 22:00:29"
"3"		"哈楼"	 "2025-09-11 20:32:44"	"20.0300"	"0.4300000"   "2"	       "2025-09-06 22:07:06"
"4"		"尼格"	 "2025-09-21 20:32:44"	"20.2300"	"0.0400000"	  "1"	       "2025-09-06 22:24:26"
"5"		"吹杨"	 "2025-12-21 20:32:44"	"120.2340"	"0.0434430"	  "1"	       "2025-09-06 22:28:28"
"6"		"艾伦"	 "2025-12-21 20:32:44"	"120.2350"	"0.0434530"	  "1"	       "2025-09-06 22:30:05"

处理流程:

java 复制代码
@RestController
@RequestMapping("/inoutput")
@Api(tags = "输入输出类型转换")
public class ConvertController {

    @Autowired
    private ConvertDao convertDao;

    @PostMapping("/convert")
    @ApiOperation("输入输出转换")
    public Result<ConvertResponse> convert(@RequestBody ConvertRequest request) {
        // 输入
        int age = request.getAge();                 // 30
        Date time1 = request.getTime1();            // Mon Sep 01 08:00:00 CST 2025  
        Date time2 = request.getDueDate();          // Sun Dec 21 20:32:44 CST 2025    
        BigDecimal price1 = request.getPrice1();    // 220        
        BigDecimal price2 = request.getPrice();     // 120.235        
        BigDecimal price3 = request.getRate();      // 0.043453            

        // 落库
        ConvertBO convertBO = BeanUtil.copyProperties(request, ConvertBO.class);
        convertBO.setCreateTime(new Date());
        convertDao.insert(convertBO);

        // 查库
        ConvertBO res = convertDao.selectById(convertBO.getId());

        // 值转换,价格保留两位小数,四舍五入,利率加%保留两位小数,四舍五入
        ConvertResponse response = BeanUtil.copyProperties(res, ConvertResponse.class);
        BigDecimal price = res.getPrice();
        response.setPrice(ConvertBO.formatPrice(price));
        BigDecimal rate = res.getRate();
        response.setRate(ConvertBO.formatRate(rate));

        response.setPayMethod(PayMethodEnum.getDescByCode(response.getPayMethod()));

        // 输出
        response.setTime1(time1);
        return Result.success(response);
    }
}
java 复制代码
@Mapper
public interface ConvertDao {

    ConvertBO selectById(Integer id);

    int insert(ConvertBO convertBO);
}
xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.ext.inoutput.dao.ConvertDao">

    <select id="selectById" resultType="com.sky.ext.inoutput.bo.ConvertBO">
        select * from t_convert_test where id = #{id}
    </select>

    <insert id="insert" parameterType="com.sky.ext.inoutput.bo.ConvertBO" keyProperty="id" useGeneratedKeys="true">
        insert into t_convert_test (name, due_date, price, rate, pay_method, create_time)
        values (#{name}, #{dueDate}, #{price}, #{rate}, #{payMethod}, #{createTime});
    </insert>
</mapper>
java 复制代码
@Getter
@AllArgsConstructor
public enum PayMethodEnum {

    YCXHQ("1", "一次性还清"),
    XBHX("2", "先本后息");

    private String code;
    private String desc;

    public static String getDescByCode(String code){
        for (PayMethodEnum value : PayMethodEnum.values()) {
            if(value.getCode().equals(code)){
                return value.getDesc();
            }
        }
        return null;
    }
}
相关推荐
爱学习de测试小白5 小时前
13-Java-面向对象-封装和this关键字
java
凉、介5 小时前
U-Boot 多 CPU 执行状态引导
java·服务器·前端
一个尚在学习的计算机小白5 小时前
spring
android·java·spring
csdn_clwjc5 小时前
synchronized 锁升级
java·juc
脚大江山稳5 小时前
docker使用nginxWebUI配置
java·docker·容器
Miraitowa_cheems5 小时前
LeetCode算法日记 - Day 34: 二进制求和、字符串相乘
java·算法·leetcode·链表·职场和发展
CHANG_THE_WORLD5 小时前
C++并发编程指南 std::promise 介绍与使用
java·开发语言·c++·promise
Bonnie_12155 小时前
01-线上问题处理-树形结构拼接
java
重生成为编程大王5 小时前
FreeMarker快速入门指南
java·后端